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

PySpark左连接后结果行数异常过多问题咨询

PySpark左连接行数暴增的原因及代码问题解析

代码本身的小问题

你写的代码重复执行了两次左连接,但第二次的赋值直接覆盖了第一次的结果,这不是行数暴增的关键,真正的问题出在关联键的重复上。

行数异常的核心原因

左连接的逻辑是:df1里的每一行,都会匹配df2中所有Region相同的行,最终行数是df1每行匹配到的df2行数相加的总和。

  • 要是df1和df2的Region列都有大量重复值,就会触发笛卡尔积式的匹配。比如df1里某个区域有100条数据,df2同区域有1000条,光这部分就会生成10万条数据。
  • 你得到的108亿+行数,刚好和47972乘852747的结果差不多,这说明两个表的Region几乎是全量匹配,大概率是Region列重复率极高,甚至可能整个列都是同一个值。

怎么解决

  • 先查一下Region的重复情况:
    # 查看df1中各Region的重复次数
    df1.groupBy('Region').count().orderBy('count', ascending=False).show()
    # 查看df2中各Region的重复次数
    df2.groupBy('Region').count().orderBy('count', ascending=False).show()
    
  • 如果需要的是合理的一对多或一对一匹配,先对df2按Region去重或者聚合:
    # 给df2按Region去重,保留每条Region的第一条数据
    df2_dedup = df2.dropDuplicates(['Region'])
    # 再执行左连接
    merged_df = df1.join(df2_dedup, on=['Region'], how='left')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:55:27