【问题标题】:How to Join Multiple Columns in Spark SQL using Java for filtering in DataFrame如何使用 Java 连接 Spark SQL 中的多个列以在 DataFrame 中进行过滤
【发布时间】:2016-05-14 17:06:12
【问题描述】:
  • 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 抛出错误,说 &amp;&amp; is not allowed.

【问题讨论】:

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


    【解决方案1】:

    Spark SQL 在Column 上提供了一组标记为java_expr_ops 的方法,这些方法旨在实现Java 互操作性。它包括可以在此处使用的and(另见or)方法:

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

    【讨论】:

    • 如何在列号不固定的情况下使用java API动态生成上述条件。因为它可能是 2、4、3,7 或更多..
    【解决方案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");

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

    【讨论】:

      猜你喜欢
      • 2017-02-19
      • 2018-10-18
      • 2016-09-28
      • 1970-01-01
      • 2017-03-18
      • 2016-11-13
      • 1970-01-01
      • 2015-10-05
      相关资源
      最近更新 更多