0

私は2つのテーブルを持っています.1つは値を持ち、もう1つは参照値を持っています。私はテーブル1をテーブル2の値に置き換えたいが、これを行うためのエレガントな方法は見つからない。ルックアップテーブル値の列を置き換えます

Table 1 (main) 

name  age  country  last_visited 
x1  a1   UK   2016 
x2  a3   US   2017 
x3  a1   China   2015 

Table 2 (lookup) 
code  value date_updated 
x1  Dom  2017 
a1  25  2017 
x2  Peter  2017 
x3  Alice  2017 
a3  26  2017 

Final Table (What i want) 

name  age  country  last_visited 
Dom  25   UK   2016 
Peter  26   US   2017 
Alice  25   China   2015 

私は表2に表1に参加しようとしたが、その後これは私が後から列をドロップ/交換すると、私は列ごとに個別にこれをしなければならない関係しました。私は上記のルックアップ値を持っている列の小さな部分を与えただけですが、実際には同じテーブルにルックアップ値を含む約8列あります。どのように私はこれを達成するのですか?

val unsanitised_data = table1.join(table2, table1.col("name") === table2.col("code"), "left").drop("last_visited", "name", "code") 

名前に「値」の名前を変更し、年齢や他の列に同じことをもう一度行う必要があります。これを行うにはこれが最善の方法ですか?

+0

交換の論理は何ですか? – eliasah

+0

名前のロジックは、table1.col( "name")=== table2.col( "code")、年齢table1.col( "age")=== table2.col( "code") – CodeGeek123

答えて

3

シンプルjoinselect機能が

df1.join(df2, df1("name")=== df2("code"), "left").select($"value".as("name"), $"age", $"country", $"last_visited") 
    .join(df2,df1("age")=== df2("code"), "left").select($"name", $"value".as("age"), $"country", $"last_visited") 
    .show(false) 

あなたの問題を解決する必要があります編集

あなたはcolumnsあまりにも多くを持っており、第二のテーブルの列を必要としないなら、あなたは

を行うことができます
df1.join(df2, df1("name")=== df2("code"), "left").withColumn("name", col("value")).drop(df2.columns: _*) 
    .join(df2,df1("age")=== df2("code"), "left").withColumn("age", col("value")).drop(df2.columns: _*) 
    .show(false) 
+0

ここの問題テーブルに150列ありますか?だからselect文でそれぞれを個別に選択するのはおそらく最も実用的ではない;( – CodeGeek123

関連する問題