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

PySpark调用dropDuplicates报错:LeftSemi连接不支持PythonUDF

报错原因分析
  • dropDuplicates()的底层逻辑
    Spark的dropDuplicates()方法内部是通过**左半连接(LeftSemi Join)**实现的:它会先提取目标列的唯一值集合,再将原表与这个集合做左半连接来过滤重复项。

  • Python UDF与左半连接的冲突
    Spark明确禁止在左半连接的条件中使用Python UDF——因为Python UDF运行在JVM之外的Python进程中,无法被Spark的SQL引擎优化,也无法参与分布式连接的高效计算。

  • 你的代码中的问题点
    你生成Week_start_date的代码存在写法错误:

    Joined_data=Joined_data.withColumn("Week_start_date",date_sub(next_day('AsOfDate','Sun'),7))
    

    这里的'AsOfDate'是字符串字面量,不是对DataFrame列的引用,Spark无法识别为内置函数的列操作,反而可能触发隐式的Python层面处理(或你误将Python自定义函数当成了Spark内置函数),导致Week_start_date列依赖Python UDF。当dropDuplicates()触发左半连接时,连接条件中包含了这个Python UDF,就触发了报错。

  • 修复方法
    将列引用改为正确的Spark列对象,确保使用的是Spark内置函数:

    from pyspark.sql.functions import col, next_day, date_sub
    Joined_data=Joined_data.withColumn("Week_start_date",date_sub(next_day(col("AsOfDate"),'Sun'),7))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:25:40