Scala如何使用变量进行连接条件

时间:2017-08-07 18:55:22

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

我有两个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:_*)

但它不起作用,给出了错误。 有什么想法吗?

1 个答案:

答案 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)