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抛出错误说不允许&&
。
答案 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");
注意:通过这种方式可以轻松支持动态列。