java.lang.classcastexception:org.apache.spark.sql.column不能强制转换为scala.collection.seq

tzdcorbm  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(351)

为了在java的spark应用程序中使用right join,我正在执行类似的操作。

Dataset<Row> dataset3 = dataset1.join(dataset2, 
       (Seq<String>) dataset1.col("target_guid"),RightOuter.sql());

但是得到这个错误

java.lang.ClassCastException: org.apache.spark.sql.Column cannot be 
cast to scala.collection.Seq

除此之外,我找不到在java中为数据集使用连接的方法。有人能帮我想办法吗?

2ekbmq32

2ekbmq321#

可以把你的代码改成这样,

Dataset<Row> dataset3 = dataset1.as("dataset1").join(dataset2.as("dataset2"),
                dataset1.col("target_guid").equalTo(dataset2.col("target_guid")), RightOuter.sql());
puruo6ea

puruo6ea2#

如果您想在java中使用下面的数据集api-

def join(right: Dataset[_], usingColumns: Seq[String], joinType: String): DataFrame

然后将字符串列表转换为seq。请保持下面的方法方便转换 java listscala seq 大多数spark API都接受 scala seq ```
import scala.collection.JavaConversions;
Buffer toScalaSeq(List list) {
return JavaConversions.asScalaBuffer(list);
}

你也不能用 `joinType` 作为 `RightOuter.sql()` 其计算结果为 `'RIGHT OUTER'` . 支持的 `join types` 包括-

'inner', 'outer', 'full', 'fullouter', 'full_outer', 'leftouter', 'left', 'left_outer', 'rightouter', 'right', 'right_outer', 'leftsemi', 'left_semi', 'leftanti', 'left_anti', 'cross'

现在你可以用-

Dataset dataset3 = dataset1.join(dataset2,
toScalaSeq(Arrays.asList("target_guid")), "rightouter");

相关问题