我有一个非常简单的spark代码狙击手,它在scala2.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
作为一个 Iterator[Row]
. ds
是一个Dataframe,定义为 type DataFrame = Dataset[Row]
. foreachPartition
有两个签名:
def foreachPartition(f: Iterator[T] => Unit): Unit def foreachPartition(func: ForeachPartitionFunction[T]): Unit
谢谢你的帮助。
1条答案
按热度按时间rsaldnfx1#
这是为了帮助有人面对这个问题和解决办法,可以做什么来绕过这个问题。
您可以将dataframe转换为rdd,然后使用foreachpartition,这样就可以编译和构建代码。