加入 2 个数据帧时覆盖数据帧中的值
Overriding values in dataframe while joining 2 dataframes
在下面的示例中,我想用 Dataframe B 中的相应值(如果存在)覆盖 Spark Dataframe A 中的值。有没有办法使用 Spark (Scala) 来做到这一点?
数据帧 A
ID Name Age
1 Paul 30
2 Sean 35
3 Rob 25
数据帧 B
ID Name Age
1 Paul 40
结果
ID Name Age
1 Paul 40
2 Sean 35
3 Rob 25
结合使用 left join
和 coalesce
应该可以解决问题,例如:
dfA
.join(dfB, "ID", "left")
.select(
dfA.col("ID"),
dfA.col("Name"),
coalesce(dfB.col("Age"), dfA.col("Age")).as("Age")
)
说明:对于一个特定的IDsome_id
,有2种情况:
- 如果
dfB
不包含 some_id
:那么左连接将为 dfB.col("Age")
和
coalesce
将 return 来自表达式的第一个 non-null 值
传递给它,即 dfA.col("Age")
的值
- 如果
dfB
包含 some_id
,则将使用 dfB.col("Age")
中的值。
在下面的示例中,我想用 Dataframe B 中的相应值(如果存在)覆盖 Spark Dataframe A 中的值。有没有办法使用 Spark (Scala) 来做到这一点?
数据帧 A
ID Name Age
1 Paul 30
2 Sean 35
3 Rob 25
数据帧 B
ID Name Age
1 Paul 40
结果
ID Name Age
1 Paul 40
2 Sean 35
3 Rob 25
结合使用 left join
和 coalesce
应该可以解决问题,例如:
dfA
.join(dfB, "ID", "left")
.select(
dfA.col("ID"),
dfA.col("Name"),
coalesce(dfB.col("Age"), dfA.col("Age")).as("Age")
)
说明:对于一个特定的IDsome_id
,有2种情况:
- 如果
dfB
不包含some_id
:那么左连接将为dfB.col("Age")
和coalesce
将 return 来自表达式的第一个 non-null 值 传递给它,即dfA.col("Age")
的值
- 如果
dfB
包含some_id
,则将使用dfB.col("Age")
中的值。