我有一个非常简单的 Spark 代码片段,它在 Scala 2.11 上运行,并在 2.12 后停止编译。
import spark.implicits._
val ds = Seq("val").toDF("col1")
ds.foreachPartition(part => {
part.foreach(println)
})
它失败并出现错误:
Error:(22, 12) value foreach is not a member of Object
part.foreach(println)
解决方法是帮助编译器处理此类代码:
import spark.implicits._
val ds = Seq("val").toDF("col1")
println(ds.getClass)
ds.foreachPartition((part: Iterator[Row]) => {
part.foreach(println)
})
有谁对为什么编译器无法推断有一个很好的解释part
as an Iterator[Row]
.
ds
是一个 DataFrame,定义为type DataFrame = Dataset[Row]
.
foreachPartition
有两个签名:
def foreachPartition(f: Iterator[T] => Unit): Unit
def foreachPartition(func: ForeachPartitionFunction[T]): Unit
感谢您的帮助。
这是为了帮助面临问题的人以及可以采取哪些措施来解决此问题。
您可以将 Dataframe 转换为 rdd,然后使用 foreachpartition,您将能够编译和构建代码。
ds.rdd.foreachPartition(part => {
part.foreach(println)
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)