scala—如何将不同Dataframe中的项连接到一个公共Dataframe

qyuhtwio  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(479)

假设我们有一个Dataframe'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”合并,并且即将更新的数据可能具有新属性,在这种情况下,对于“a”中没有该属性值的项,它应该显示null。

g2ieeal7

g2ieeal71#

尝试使用left join合并数据并只获取更新的行。下面的代码合并了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|
+---+------+-------+--------+

相关问题