2017-08-07 48 views
1

我有兩個包含兩個不同數據框的連接鍵的String Seq變量。Scala如何在連接條件中使用變量

我的問題是我不知道你是否將這些變量傳遞給連接。這是我曾嘗試:

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:_*) 

但它沒有工作,給錯誤.... 任何想法?

回答

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)