Scala 无法推断

2024-04-22

我有一个非常简单的 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(使用前将#替换为@)

Scala 无法推断 的相关文章

随机推荐