我想按如下方式进行广播加入:
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'变量将是String。
答案 0 :(得分:1)
如果连接列名相同,则下面的语法将使用完整。
val joincond=Seq("SNO")
df1.join(df2,joincond,"inner");
如果连接列名称不同,请使用以下语法。
val cond="SNO=SOME_OTHER_COLUMN"
df1.join(df2,expr(cond),"inner");
答案 1 :(得分:0)
如果我们混合使用具有相同名称和不同名称的列,并且必须按如下所示执行联接,那么该怎么办:
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))