scala - Spark shell : strange behavior with import

标签 scala shell apache-spark scala-repl

我正在 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 issue .
它适用于 Spark 1.6,但该问题在 Spark 2.1.0 或更高版本中仍然存在。

根本原因:

Classes defined in Shell are inner classes, and therefore cannot be easily instantiated by reflection. They need an additional reference to the outer object, which is non-trivial to obtain.

作为解决方法,请尝试在 Spark-shell 中使用 :paste

关于scala - Spark shell : strange behavior with import,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48525402/

相关文章:

MySQLSHOW 抑制 Bash 脚本中的警告

apache-spark - Spark mllib 打乱数据

apache-spark - Spark SQL 堆栈溢出

apache-spark - 如何有效地从 Cassandra 读取数百万行?

mongodb - Play 框架应用程序中的 Scala 类型删除警告

scala - 案例类的收缩宏

shell - ssh之后通过数组循环到shell脚本中的主机

java - 如何...使用 MigLayout

scala - Scala 的 javadepend/ndepend

c - c 中的 exit(0) 仅偶尔有效