2016-12-04 8 views
1

2つのデータフレームがあります。簡単にするために、私は次のようにそれらを置く:2つのDataFrameを結合し、1つの列を条件付きで置き換える方法

DataFrame1

id | name 
----------- 
0 | Mike 
1 | James 

DataFrame2

id | name | salary 
------------------- 
0 | M | 10 
1 | J | 20 
2 | K | 30 

私はid上の2つのデータフレームを結合し、維持しながら、唯一DataFrame1の列nameを維持したいです元のものがidに対応する場合はDataFrame2になります。

それは次のようになります。

id | name | salary 
-------------------- 
0 | Mike | 10 
1 | James | 20 
2 | K  | 30 

今まで、私だけで2つのデータフレームを結合する方法を知っている:

df1.join(df2, df1("id")===df2("id"), "left").select(df2("id"), df1("name"), df2("salary")) 

しかし、それは名前値 "K" を無視するようにnullを使用します。

ありがとうございます!あなたは以下のようなDataFrameNaFunctionsを使用することができるNULL値を置き換えるために

答えて

4

​​3210を使用すると、指定された列からnullではない最初の列が返されます。プラス - leftを使用すると、df1df2に参加する必要があります。逆の方法ではありません。

import org.apache.spark.sql.functions._ 

df2.join(df1, df1("id")===df2("id"), "left") 
    .select(df2("id"), coalesce(df1("name"), df2("name")), df2("salary")) 
2

...

df1.join(df2, df1("id")===df2("id"), "left_outer") 
.select(df2("id"), df1("name"), df2("salary")) 
.na.fill(ImmutableMap.of("name", "unknown")).show() 

'不明' はサンプル値です。あなたは@Tzachで述べたようにゾハルが def coalesce(e: Column*)機能に答えるなお、NULL値の列も

val joined = df1.join(df2, df1("id")===df2("id"), "left_outer") 
    .select(df2("id"), df1("name"), df2("salary")) 

val final = joined.where(joined.col("name").isNotNull) 
final.show() 

と行をしたくない場合は...あなたが望んでいた値で

を置き換えることができます

nullでない最初の列を返します。すべての入力が の場合はnullを返します。

この種のものをお探しの場合は、先に進むことができます。

関連する問題