如何使用 Java 在 Spark SQL 中联接多个列,以便在 DataFrame 中进行筛选

  • DataFrame a= 包含列 x,y,z,k
  • DataFrame b= 包含列 x,y,a

    a.join(b,<condition to use in java to use x,y >) ??? 
    

我尝试使用

a.join(b,a.col("x").equalTo(b.col("x")) && a.col("y").equalTo(b.col("y"),"inner")

但是Java正在抛出错误说是不允许的。&&


答案 1

Spark SQL 提供了一组标记为标记为为 Java 互操作性而设计的方法。它包括(另请参阅)可以在此处使用的方法:Columnjava_expr_ops

a.col("x").equalTo(b.col("x")).and(a.col("y").equalTo(b.col("y"))

答案 2

如果要使用多列进行联接,可以执行如下操作:

a.join(b,scalaSeq, joinType)

您可以将列存储在Java-List中,并将List转换为Scala seq。将Java-List转换为Scala-Seq:

scalaSeq = JavaConverters.asScalaIteratorConverter(list.iterator()).asScala().toSeq();

例:a = a.join(b, scalaSeq, "inner");

注意:以这种方式可以轻松支持动态列。


推荐