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

PySpark中如何用另一DataFrame覆盖原表含NULL值的行

实现方案

可以根据你使用的 DataFrame 运行环境选择对应方案:

Pandas 环境实现

核心逻辑是按主键Id左关联两个表后,用df1的对应字段填充df的空值:

# 按Id左连接两个表,给df1的重复列加后缀区分
merged_df = df.merge(df1, on="Id", how="left", suffixes=("", "_backup"))

# 遍历需要补全的列,用df1的值填充空值
fill_cols = ["Latitude", "Longitude"]
for col in fill_cols:
    merged_df[col] = merged_df[col].fillna(merged_df[f"{col}_backup"])

# 清理多余的备份列,得到最终结果
result_df = merged_df.drop(columns=[c for c in merged_df.columns if "_backup" in c])

PySpark 环境实现

Spark 内置的coalesce函数可以直接取第一个非空值,实现更简洁:

from pyspark.sql.functions import coalesce

# 按Id左关联两个表,分别取别名区分
joined_df = df.alias("origin").join(df1.alias("backup"), on="Id", how="left")

# 构造查询逻辑,空值字段用备份表的值覆盖
result_df = joined_df.select(
    "origin.Id",
    "origin.Name",
    "origin.Country",
    "origin.City",
    "origin.Address",
    coalesce("origin.Latitude", "backup.Latitude").alias("Latitude"),
    coalesce("origin.Longitude", "backup.Longitude").alias("Longitude")
)

如果需要补全的字段更多,只需要对应修改fill_cols(Pandas)或者select里的字段列表(PySpark)即可,逻辑通用。

内容的提问来源于stack exchange,提问作者Rustam-Z

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:45:03