2017-04-08 10 views
0

複数の列に2つのスパーク・スケーラ・データフレームを動的に結合したいと考えています。私は、次の文章に示すように、列名の比較を厳密にコーディングしないようにします。動的に結合条件をハードコードすることなく、複数の列に2つのスパーク・スケーラ・データ・フレームを動的に結合する

val joinRes = df1.join(df2, df1("col1") == df2("col1") and df1("col2") == df2("col2")) 

このクエリの解決策は、すでに次のリンクで--provided pysparkバージョンに存在する PySpark DataFrame - Join on multiple columns dynamically

私が使用して同じコードをコーディングしたい火花スカラ座あなたはScalaで

答えて

4

それはPythonのように同様の方法でいますが、マップを使用して機能を削減する必要があります。

val sparkSession = SparkSession.builder().getOrCreate() 
import sparkSession.implicits._ 

val df1 = List("a,b", "b,c", "c,d").toDF("col1","col2") 
val df2 = List("1,2", "2,c", "3,4").toDF("col1","col2") 

val columnsdf1 = df1.columns 
val columnsdf2 = df2.columns 

val joinExprs = columnsdf1 
    .zip(columnsdf2) 
    .map{case (c1, c2) => df1(c1) === df2(c2)} 
    .reduce(_ && _) 

val dfJoinRes = df1.join(df2,joinExprs) 
+1

ヴァルdfJoinRes = df1.join(DF2、df1.columns.toSet.intersect (df2.columns.toSet).toSeq、 "left")//このコードは私のケースでも同様に動作します – Anhata

+0

はい、それはうまく動作しますが、私はその答えを投稿したかったのですが、df1 df2の名前は異なりますか? –

関連する問題