我将Spark 2.1.1与Scala 2.11.8一起使用。
在spark-shell
内部,我使用:load
命令加载具有RDD方法的类。
当我尝试加载类时,我收到以下编译错误:
错误:未找到:输入RDD
为什么呢?我已经获得了进口声明。
这是我正在使用
的代码
答案 0 :(得分:6)
这似乎是:load
中spark-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建议的方法