如何使用Java在Spark SQL中加入多个列以在DataFrame中进行过滤

时间:2016-02-04 21:29:45

标签: java apache-spark dataframe apache-spark-sql

  • 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抛出错误说不允许&&

2 个答案:

答案 0 :(得分:20)

Spark SQL在Column上提供了一组标记为java_expr_ops的方法,这些方法专为Java互操作性而设计。它包括and(另请参阅or)方法,可在此处使用:

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

答案 1 :(得分:1)

如果你想使用多列进行连接,你可以这样做:

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");

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