为什么spark-shell无法加载带有导入RDD的类的文件?

时间:2017-06-09 06:36:39

标签: scala apache-spark

我将Spark 2.1.1与Scala 2.11.8一起使用。

spark-shell内部,我使用:load命令加载具有RDD方法的类。

当我尝试加载类时,我收到以下编译错误:

  

错误:未找到:输入RDD

为什么呢?我已经获得了进口声明。

image

这是我正在使用

的代码

image1

2 个答案:

答案 0 :(得分:6)

这似乎是:loadspark-shell功能。解决方案是将import org.apache.spark.rdd.RDD(无点和下划线)移动到您的类定义。

这似乎并非特定于RDD类,而是导入的任何类。除非在类本身内定义了import语句,否则它将无效。

话虽如此,由于导入在课堂之外,以下内容将无效。

import org.apache.spark.rdd.RDD
class Hello {
  def get(rdd: RDD[String]): RDD[String] = rdd
}

scala> :load hello.scala
Loading hello.scala...
import org.apache.spark.rdd.RDD
<console>:12: error: not found: type RDD
         def get(rdd: RDD[String]): RDD[String] = rdd
                                    ^
<console>:12: error: not found: type RDD
         def get(rdd: RDD[String]): RDD[String] = rdd
                      ^

您可以使用-v的{​​{1}}标记查看封底内容。

:load

这导致我猜测在类定义中导入可能会有所帮助。它做到了! (令我惊讶的是)

scala> :load -v hello.scala
Loading hello.scala...

scala>

scala> import org.apache.spark.rdd.RDD
import org.apache.spark.rdd.RDD

scala> class Hello {
     |   def get(rdd: RDD[String]): RDD[String] = rdd
     | }
<console>:12: error: not found: type RDD
         def get(rdd: RDD[String]): RDD[String] = rdd
                                    ^
<console>:12: error: not found: type RDD
         def get(rdd: RDD[String]): RDD[String] = rdd
                      ^

您还可以使用class Hello { import org.apache.spark.rdd.RDD def get(rdd: RDD[String]): RDD[String] = rdd } scala> :load -v hello.scala Loading hello.scala... scala> class Hello { | import org.apache.spark.rdd.RDD | def get(rdd: RDD[String]): RDD[String] = rdd | } defined class Hello 命令将类粘贴到:paste。当你可以在自己的包中定义类时,就会出现所谓的原始模式。

spark-shell

答案 1 :(得分:0)

这是spark-shell中的错误,请参考https://issues.apache.org/jira/browse/SPARK-22393,并已在spark 2.3.0中修复。请使用spark 2.3.0(或更高版本)或使用@Jacek Laskowski建议的方法