调用Dataset静态方法在Spark Shell中不起作用



我是Scala的新手,所以如果解决方案微不足道,我会提前道歉。

我目前正试图在Spark Shell中执行一个查询,在那里我正在修改数据集的逻辑计划。以下是我正在挣扎的代码示例:

import org.apache.spark.sql._
val newPlan = ...
val newDS = Dataset.ofRows(spark, newPlan)

当我运行这个时,我得到以下错误消息:

<console>:41: error: not found: value Dataset
val newDS = Dataset.ofRows(spark, newPlan)

尝试在声明中指定包时:

scala> val newDS = org.apache.spark.sql.Dataset.ofRows(spark, newPlan)

我得到这个:

<console>:41: error: object Dataset in package sql cannot be accessed in package org.apache.spark.sql
val newDS = org.apache.spark.sql.Dataset.ofRows(spark, newPlan)

我也试过import org.apache.spark.sql.Datasetimport org.apache.spark.sql.Dataset._import org.apache.spark.sql.Dataset.*,但都不起作用。

我使用的是Spark 2.1.0。提前感谢您的帮助。

编辑

答案是,Dataset类的ofRows方法是scala私有方法。但由于Scala/Java代码的自动转换,它可以从Java访问(并出现在Javadoc中)。因此,从技术上讲,我们不应该使用这种方法,但它可以通过Java API意外访问。我想执行逻辑计划更改,因为我正在尝试实现运行注入安全的动态SQL查询。但我会努力找到一种不那么棘手的方式来实现这个目标。

答案是,Dataset类的Rows方法是一个scala私有方法。但由于Scala/Java代码的自动转换,它可以从Java访问(并出现在Javadoc中)。因此,从技术上讲,我们不应该使用这种方法,但它可以通过Java API意外访问。我想执行逻辑计划更改,因为我正在尝试实现运行注入安全的动态SQL查询。但我会努力找到一种不那么棘手的方式来实现这个目标。

相关内容

  • 没有找到相关文章

最新更新