如何使用if else条件合并2 Spark数据帧

时间:2017-02-08 07:54:29

标签: sql apache-spark apache-spark-sql spark-dataframe

我们如何合并2个数据帧并使用条件形成新数据。例如。 如果数据框B中存在数据,则使用数据框B中的行,否则使用数据框A中的数据。

DataFrame A

+-----+-------------------+--------+------+
| Name|           LastTime|Duration|Status|
+-----+-------------------+--------+------+
|  Bob|2015-04-23 12:33:00|       1|logout|
|Alice|2015-04-20 12:33:00|       5| login|
+-----+-------------------+--------+------+

DataFrame B

+-----+-------------------+--------+------+
| Name|           LastTime|Duration|Status|
+-----+-------------------+--------+------+
|  Bob|2015-04-24 00:33:00|       1|login |
+-----+-------------------+--------+------+

我想通过使用Dataframe A中的整个数据来形成新的数据框,但是使用B中的数据更新行

+-----+-------------------+--------+------+
| Name|           LastTime|Duration|Status|
+-----+-------------------+--------+------+
|  Bob|2015-04-24 00:33:00|       1|login |
|Alice|2015-04-20 12:33:00|       5| login|
+-----+-------------------+--------+------+

我尝试了全外连接

val joined = df.as("a").join(df.as("b")).where($"a.name" === $"b.name","outer")

但是它产生了一行有重复列。如果第二行中存在一个对应的行,我如何忽略第一个表中的行。

1 个答案:

答案 0 :(得分:1)

val combined_df = dfa.join(dfb,Seq(“Name”),“right”)。select(dfa(“Name”),coalesce(dfa(“LastTime”),dfb(“LastTime”)), coalesce(dfa(“Duration”),dfb(“Duration”)),coalesce(dfa(“Status”),dfb(“Status”)))