2

我正在为 Scala 使用 Spark-shell 并在 Spark-shell REPL 中发现了一个奇怪的行为,如果我使用任何 IDE 则不存在。

我可以在 REPL 中一次又一次地声明相同的不可变变量,但在 IDE 中不允许这样做。

这是 REPL 中的代码:

scala> val rdd = sc.textFile("README.md")
rdd: org.apache.spark.rdd.RDD[String] = README.md MapPartitionsRDD[5] at textFile at <console>:24

scala> val rdd = sc.textFile("README.md")
rdd: org.apache.spark.rdd.RDD[String] = README.md MapPartitionsRDD[7] at textFile at <console>:24

scala> val rdd = sc.textFile("README.md")
rdd: org.apache.spark.rdd.RDD[String] = README.md MapPartitionsRDD[9] at textFile at <console>:24

scala>     val rdd = sc.textFile("README.md")
rdd: org.apache.spark.rdd.RDD[String] = README.md MapPartitionsRDD[11] at textFile at <console>:24

这是我在 Eclipse IDE 中尝试的同样的事情,它显示编译时错误:

在此处输入图像描述

我有什么遗漏 Spark-shell REPL 的配置吗?

或者这是预期的行为?

4

1 回答 1

1

在您的 REPL 中,您的代码实际上翻译如下:

object SomeName {
  val rdd = sc.textFile("README.md")
}
object Some_Other_Name {
  val rdd = sc.textFile("README.md")
}

由于您的两个rddval 都是在单独的单例中定义的,因此它们之间没有名称冲突。并且由于这发生在 REPL 的幕后,你感觉好像你正在对同一个 val 进行重新分配。

在 IDE 中,我们所有的代码都写在 Classes 或 Scala singletons(Objects) 中,因此在相同的范围内(分别在 Class/Object 内)你会返回一个错误。

于 2019-03-28T09:50:00.337 回答