spark-shell:导入奇怪的行为

时间:2018-01-30 15:48:41

标签: scala shell apache-spark scala-repl

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

我导入between current_date + time '19:00:00' and (current_date + 1) + time '19:34:59' 类:

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

1 个答案:

答案 0 :(得分:5)

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

根本原因:

  

Shell中定义的类是内部类,因此无法通过反射轻松实例化。他们需要额外引用外部对象,这是非常重要的。

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