[英]spark-shell: strange behavior with import
我正在使用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
这是Spark问题 。
它适用于Spark 1.6 ,但问题仍然存在于Spark 2.1.0或更高版本中 。
根本原因:
Shell中定义的类是内部类,因此无法通过反射轻松实例化。 他们需要额外引用外部对象,这是非常重要的。
作为一种解决方法尝试使用:paste
在spark-shell中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.