scala无法推断

a0zr77ik  于 2021-07-13  发布在  Spark
关注(0)|答案(1)|浏览(337)

我有一个非常简单的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 谢谢你的帮助。

rsaldnfx

rsaldnfx1#

这是为了帮助有人面对这个问题和解决办法,可以做什么来绕过这个问题。
您可以将dataframe转换为rdd,然后使用foreachpartition,这样就可以编译和构建代码。

ds.rdd.foreachPartition(part => {
  part.foreach(println)
})

相关问题