假设我们有一个数据帧' a ':
Id Name FavColor Address
1 John Black xyz
2 Mathew Orange www
3 Russel Red xxx
现在我有一个不同的数据集来更新一些列的值的情况,例如,让我们有DataFrame 'B':
Id FavColor
1 Red
2 Black
和DataFrame 'C':
Id Address
1 aaa
3 bbb
现在在这种情况下更新'B'和'C'需要合并到'A',我尝试合并'B'和'C',然后合并到'A',但当我合并'B'和'C'我得到:
Id FavColor Address
1 Red aaa
2 Black null
3 null bbb
,如果我将这个与'A'合并,它将是错误的,因为Id=2的地址将变为null, Id=3的FavColor将变为null。我怎么能合并即将更新的数据与'A'和即将到来的数据可能有新的属性,在这种情况下,它应该显示null的项目没有值的属性在'A'。
尝试使用左连接合并数据并只获取更新的行。下面的代码合并了A和B,然后你可以用同样的方式将它们的结果与C合并。
scala> A.join(B, A("Id") === B("Id"), "left").
| withColumn("merged", when(B("FavColor").isNotNull, B("FavColor")).otherwise(A("FavColor"))).
| drop(B("FavColor")).drop(A("FavColor")).drop(B("Id")).
| withColumnRenamed("merged", "FavColor").show()
+---+------+-------+--------+
| Id| Name|Address|FavColor|
+---+------+-------+--------+
| 1| John| xyz| Red|
| 2|Mathew| www| Black|
| 3|Russel| xxx| Red|
+---+------+-------+--------+