我们如何合并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")
但是它产生了一行有重复列。如果第二行中存在一个对应的行,我如何忽略第一个表中的行。
答案 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”)))