火花壳:导入的奇怪行为



我正在 Spark-shell 中工作(Spark 版本 2.1.0,使用 Scala 版本 2.11.8,OpenJDK 64-Bit Server 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
这是

Spark问题。
它在 Spark 1.6 中有效,但在 Spark 2.1.0 或更高版本中仍然存在该问题。

根源:

命令行管理程序中定义的类是内部类,因此不能通过反射轻松实例化。他们需要对外部对象的附加引用,这并非易事。

作为一种解决方法,请尝试在火花壳中使用:paste

最新更新