【问题标题】:How to pass join condition as a parameter to spark dataframe joins如何将连接条件作为参数传递给触发数据框连接
【发布时间】:2017-04-28 08:22:35
【问题描述】:

我想执行如下广播加入:

val z = main.as("m").join(broadcast(df.as("i")), $"m.sno" === $"i.sno", "left_outer")

但我想将连接条件 $"m.sno" === $"i.sno" 作为参数传递。

我尝试了以下方法: 首先

val cond = """ $"m.sno" === $"i.sno" """
val z = main.as("m").join(broadcast(df.as("i")), $cond, "left_outer")

我发现连接中的参数必须是列。所以我将它转换为列并尝试了。

val c = col(c)
val z = main.as("m").join(broadcast(df.as("i")), c, "left_outer")

我仍然遇到错误。如何解决这个问题。 注意:“cond”变量将是字符串。

【问题讨论】:

    标签: scala apache-spark join parameter-passing apache-spark-sql


    【解决方案1】:

    如果连接列名称相同,则以下语法将使用完整。

    val joincond=Seq("SNO")
    df1.join(df2,joincond,"inner");
    

    如果连接列名称不同,则使用以下语法。

    val cond="SNO=SOME_OTHER_COLUMN"
    df1.join(df2,expr(cond),"inner");
    

    【讨论】:

      【解决方案2】:

      如果我们混合了具有相同和不同名称的列,必须执行如下连接:

      Table A -> (a, b, c1, d1, e1) Table B -> (a, b, c2, d2, e2)

      加入条件 -> ((A.a===B.a) && (A.b===B.b) && (A.c1===B.c2) && (A.d1===A.d2))

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-31
        • 2022-01-20
        • 2021-02-18
        • 2014-05-16
        • 2013-01-08
        • 2023-02-09
        • 1970-01-01
        • 2015-09-11
        相关资源
        最近更新 更多