6

我正在使用 spark-shell(Spark 版本 2.1.0,使用 Scala 版本 2.11.8,OpenJDK 64 位服务器 VM,1.7.0_151)。

我导入Column类:

scala> import org.apache.spark.sql.Column
import org.apache.spark.sql.Column

我可以定义一个Column对象:

scala> val myCol: Column = col("blah")
myCol: org.apache.spark.sql.Column = blah

Column在函数定义中使用:

scala> def myFunc(c: Column) = ()
myFunc: (c: org.apache.spark.sql.Column)Unit

到目前为止,一切都很好。但是在定义一个类的时候,Column没有找到:

scala> case class myClass(c: Column)
<console>:11: error: not found: type Column
       case class myClass(c: Column)

然而,单线作品:

scala> case class myClass(c: org.apache.spark.sql.Column)
defined class myClass

或者

scala> import org.apache.spark.sql.Column; case class myClass(c: Column)
import org.apache.spark.sql.Column
defined class myClass
4

1 回答 1

5

这是Spark 问题
它适用于Spark 1.6,但问题仍然存在于Spark 2.1.0 或更高版本中。

根本原因:

Shell 中定义的类是内部类,因此不能通过反射轻松实例化。他们需要对外部对象的额外引用,这并不容易获得。

作为一种解决方法,尝试:paste在 spark-shell 中使用。

于 2018-01-30T16:40:48.587 回答