-
DataFrame a
= 包含列 x,y,z,k -
DataFrame b
= 包含列 x,y,aa.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抛出错误说&&
这是不允许的。
Spark SQL提供了一组标记为java_expr_ops
Column
的方法,这些方法专为Java互操作性而设计。它包括and
(另见or
)方法,可以在这里使用:
a.col("x").equalTo(b.col("x")).and(a.col("y").equalTo(b.col("y"))
如果要
使用多列进行联接,可以执行以下操作:
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");
注意:通过这种方式可以轻松支持动态列。