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

Scala 调用Dataset静态方法在Spark Shell中不起作用,scala,apache-spark,dataset,apache-spark-sql,Scala,Apache Spark,Dataset,Apache Spark Sql,我是Scala的新手,因此如果解决方案微不足道,我会提前道歉 我目前正试图在Spark Shell中执行一个查询,其中我正在修改数据集的逻辑计划。下面是我的代码示例,我正在努力: import org.apache.spark.sql._ val newPlan = ... val newDS = Dataset.ofRows(spark, newPlan) 运行此操作时,我收到以下错误消息: <console>:41: error: not found: value Datas

我是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)
我明白了:

<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)
:41:错误:无法在包org.apache.spark.sql中访问包sql中的对象数据集
val newDS=org.apache.spark.sql.Dataset.ofRows(spark,newPlan)
我还尝试了导入org.apache.spark.sql.Dataset,
导入org.apache.spark.sql.Dataset.\u
导入org.apache.spark.sql.Dataset.*
但这些都不起作用

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

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

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

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

Dataset.ofRows是一种私有方法。数据集可以通过定义编码器或定义案例类来创建。这不是创建数据集的方法。我明白了,谢谢。事实上,我检查了Spark源代码,它是一个私有方法。但是它出现在Javadoc中,看起来我们可以从Java调用它。有人知道为什么吗?Dataset.ofRows是一个私有方法。数据集可以通过定义编码器或定义案例类来创建。这不是创建数据集的方法。我明白了,谢谢。事实上,我检查了Spark源代码,它是一个私有方法。但是它出现在Javadoc中,看起来我们可以从Java调用它。有人知道为什么会这样吗?
<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)