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

PySpark全连接自定义优化:解决Org字段空值问题

解决PySpark全连接后Org字段空值问题

问题原因

全连接(full join)会保留两个DataFrame的所有记录:

  • 当记录仅存在于df1时,df2对应的字段(包括Org)会为null
  • 当记录仅存在于df2时,df1对应的字段(包括Org)会为null
    要让Org字段始终有值,需要合并两个表的Org字段,取非空的那个值。

解决方案

使用PySpark的coalesce函数,该函数会返回参数列表中第一个非空值。用它合并df1和df2的Org字段,即可替换掉原有的空值Org。

修改后的完整代码

# 定义数据
data1=[('16','123456','SuryaAndCo','FY2022Q2','12'),
       ('16','1234567','SuryaAndCo','FY2022Q2','11'),
       ('16','12345678','SuryaAndCo','FY2022Q2','19'),
       ('17','23456','BabJiAndCo','FY2021Q1','2'),
       ('17','2345689','BabJiAndCo','FY2021Q1','12'),
       ('18','23445','SalBhai','FY2023Q1','11'),]
data2=[('16','123456','SuryaAndCo','FY2022Q2','22'),
       ('16','1234567','SuryaAndCo','FY2022Q2','222'),
       ('16','12345678','SuryaAndCo','FY2022Q2','33'),
       ('17','23456','BabJiAndCo','FY2021Q1','44'),
       ('17','2345644','BabJiAndCo','FY2021Q1','55'),
       ('19','23445','SalBhai','FY2023Q1','77'),]

# 创建DataFrame
df1=spark.createDataFrame(data1,['Org','Item Number','Supplier','FiscalPeriod','QtyL'])
df2=spark.createDataFrame(data2,['Org','Item Number','Supplier','FiscalPeriod','QtyR'])

# 执行全连接
fulldf = df1.join(df2, on=['Supplier','Item Number','FiscalPeriod'], how='full')

# 合并Org字段,消除空值
from pyspark.sql.functions import coalesce
fulldf = fulldf.withColumn('Org', coalesce(df1.Org, df2.Org))

# 展示结果
display(fulldf)

说明

  • coalesce(df1.Org, df2.Org)会优先取df1中的Org值;若df1.Org为null(即该记录仅来自df2),则自动取df2.Org的值
  • 从你的数据来看,相同连接键对应的Org值是一致的,因此合并后的结果不会出现冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 04:16:33