You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PySpark DataFrame df2的值替换df1对应ID的字段值

问题描述

我有两个PySpark DataFrame:df2和df1,需要以ID作为主键,用df2中的对应值替换df1里匹配ID的字段值,同时保留df1中无匹配ID的行数据。

df2数据如下:

IDTotal_CountFinal_AFinal_BFinal_CFinal_D
1180363086
480363086
1365302465
1256262154
265302465
156262154

df1数据如下:

IDTotal_CountABCD
4800030
11800000
13650000
12560400
2650000
1560000
10341010104

预期结果:

IDTotal_CountABCD
1180363086
480363086
1365302465
1256262154
265302465
156262154
10341010104
解决方案

可通过左连接两个DataFrame,结合coalesce函数实现需求,代码如下:

from pyspark.sql import functions as F

# 左连接df1和df2,以ID作为关联键
joined_df = df1.join(df2, on="ID", how="left")

# 构造结果DataFrame:优先取df2的字段值,无匹配则保留df1原数据
result_df = joined_df.select(
    "ID",
    F.coalesce(df2.Total_Count, df1.Total_Count).alias("Total_Count"),
    F.coalesce(df2.Final_A, df1.A).alias("A"),
    F.coalesce(df2.Final_B, df1.B).alias("B"),
    F.coalesce(df2.Final_C, df1.C).alias("C"),
    F.coalesce(df2.Final_D, df1.D).alias("D")
)

# 输出结果
result_df.show()

关键逻辑说明

  1. 左连接:how="left"确保df1的所有行都被保留,包括ID在df2中不存在的记录(如ID=10)。
  2. coalesce函数:返回参数中第一个非空值,这里实现了“有匹配则用df2的值,无匹配则保留df1原值”的逻辑。
  3. 字段别名:将合并后的字段重命名为df1原有字段名,保证结果结构符合预期。

内容的提问来源于stack exchange,提问作者Scope

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 09:01:14