gpt4 book ai didi

java - 如何基于列合并两个数据帧spark java/scala?

转载 作者:行者123 更新时间:2023-11-30 02:10:31 30 4
gpt4 key购买 nike

我有两个数据框 DF1 和 DF2,其中 id 作为唯一列,DF2 可能包含 DF1 现有记录的新记录和更新值,当我们合并两个数据帧时,结果应包含新记录,而具有更新值的旧记录应保持原样。

输入示例:

id   name
10 abc
20 tuv
30 xyz

id   name
10 abc
20 pqr
40 lmn

当我合并这两个数据帧时,我希望结果为:

id   name
10 abc
20 pqr
30 xyz
40 lmn

最佳答案

使用外部join,然后使用coalesce。在斯卡拉中:

val df1 = Seq((10, "abc"), (20, "tuv"), (30, "xyz")).toDF("id", "name") 
val df2 = Seq((10, "abc"), (20, "pqr"), (40, "lmn")).toDF("id", "name")

df1.select($"id", $"name".as("old_name"))
.join(df2, Seq("id"), "outer")
.withColumn("name", coalesce($"name", $"old_name"))
.drop("old_name")

coalesce 将给出第一个非空值的值,在本例中返回:

+---+----+
| id|name|
+---+----+
| 20| pqr|
| 40| lmn|
| 10| abc|
| 30| xyz|
+---+----+

关于java - 如何基于列合并两个数据帧spark java/scala?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50249298/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com