2017-08-07 21 views
1

2つの異なるデータフレームの結合キーを含む2つの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) 
関連する問題