scala 值nonEmpty不是Object的成员

0wi1tuuw  于 2023-04-06  发布在  Scala
关注(0)|答案(2)|浏览(264)

下面的代码在Scala 2.11上运行良好,在Scala 2.12上出现错误“value nonEmpty is not a member of Object”。有人能提供解决方案吗?

val ds = spark.createDataset(List("abc","efg","xyz"))
ds.foreachPartition(
    partitionIterator =>
 {
        if(partitionIterator.nonEmpty){
            print(partitionIterator.getClass)
        }     
    }
)

尝试从Spark 2.4迁移到Spark 3.2集群及以上代码在Spark 3.2集群上失败

vmjh9lq9

vmjh9lq91#

尝试添加lambda参数的类型,即替换

ds.foreachPartition(
  partitionIterator => ...

ds.foreachPartition(
  (partitionIterator: Iterator[String]) => ...

与2.11相反,2.12中没有推断类型。
在Scala中,有时候你必须指定变量、泛型等的类型,尽管通常有类型推断。
当你从一个版本切换到另一个版本时,标准库会发生变化,编译器类型推断算法也会发生变化,尤其是当你从2.x切换到2.y时。
顺便说一下,在2.13中,错误是missing parameter type: partitionIterator => {,而不是2.12中的value nonEmpty is not a member of Object: if (partitionIterator.nonEmpty) {

jq6vz3qz

jq6vz3qz2#

您应该尝试使用hasNext方法而不是nonEmpty

val ds = spark.createDataset(List("abc","efg","xyz"))
ds.foreachPartition(
  partitionIterator => {
    if(partitionIterator.hasNext) {
      print(partitionIterator.getClass)
    }
  }
)

相关问题