0

数据集 person = spark.read.textfile(path).map(Person::new,Encoders.bean(Person.class))

当我在上面尝试时,它将在 spark2.4(scala-2.11) 中工作,但在 spark3.1.1(scala-2.12) 中,它对于 DataSet 类型显示为模棱两可。而且我在哪里使用地图,过滤器,地图分区,平面地图变得模棱两可/

但是通过进行类型转换,所有转换都会成功 spark.read.textfile(path).map((MapFunction<String,Person>)Person::new,Encoders.bean(Person.class))

有没有其他方法没有类型转换/代码更改

4

1 回答 1

0

来自迁移指南,“SQL、数据集和数据帧”一章:

在 Spark 3.0 中,如果 Dataset 查询包含由自连接引起的不明确的列引用,则会失败。一个典型的例子:val df1 = ...; val df2 = df1.filter(...);,然后 df1.join(df2, df1("a") > df2("a")) 返回一个空结果,这非常令人困惑。这是因为 Spark 无法解析指向自联接表的 Dataset 列引用,并且 df1("a") 与 Spark 中的 df2("a") 完全相同。要恢复 Spark 3.0 之前的行为,可以将 spark.sql.analyzer.failAmbiguousSelfJoin 设置为 false。

来源https://spark.apache.org/docs/latest/sql-migration-guide.html

于 2021-12-23T12:32:05.203 回答