【发布时间】:2020-07-10 23:50:43
【问题描述】:
假设我有这个用 Scala 2.12 编写的 Spark 代码
val dataset = spark.emptyDataset[String]
dataset.foreachPartition( partition => partition.foreach {
entry: String => println(entry)
})
当我运行代码时,编译器给出了这个错误
[info] Compiling 1 Scala source to <path>/scala-2.12/classes ...
[error] Code.scala:11:52: value foreach is not a member of Object
[error] empty.foreachPartition( partition => partition.foreach{
[error] ^
[error] one error found
[error] (Compile / compileIncremental) Compilation failed
[error] Total time: 1 s, completed Jul 11, 2020 1:43:41 AM
为什么编译器partition 是Object 而不是Iterator[String]?
我必须手动添加 partition 类型才能使代码正常工作。
val dataset = spark.emptyDataset[String]
dataset.foreachPartition( (partition:Iterator[String]) => partition.foreach {
entry: String => println(entry)
})
【问题讨论】:
-
这是由于java的重载导致的问题。你必须明确类型,没有解决方法,我怀疑 Spark 维护者会做任何事情来改进 Scala API,他们只关心 Python 和 Java 之一。
-
@LuisMiguelMejíaSuárez 考虑到 Scala 应该是 Spark 的一等公民,这很奇怪。
-
多年前确实如此。而且你不能怪他们,只是简单的营销 Scala 用户的百分比是少数。
标签: scala apache-spark lambda apache-spark-dataset