我有两个Seq[String]
变量,包含两个不同数据帧的连接键。
我的问题是我不知道你是谁将这些变量传递给了连接。这是我尝试过的:
val listA = Seq("col1","col2","col3")
val listB = Seq("A","B","C")
df1.join(df2,df1(s"$listA")===df2(s"$listB"),"left")
这只是不起作用,因为它传入“col1,col2,col3”而不是“col1”,“col2”,“col3”
我也试过这个:
df1(listA:_*)
但它不起作用,给出了错误。 有什么想法吗?
答案 0 :(得分:3)
例如,创建一个连接表达式:
df1.join(df2,
listA.zip(listB).map { case (x, y) => df1(x) === df2(y) }.reduce(_ && _))
或重命名要在两侧匹配的列:
listA.zip(listB).foldLeft(df1){
case (df, (oldName, newName)) => df.withColumnRenamed(oldName, newName)
}.join(df2, listB)