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

Databricks中PySpark去重代码执行后无返回行的原因排查

PySpark去重后无结果问题排查

问题背景

DataFrame结构与数据如下:

IdcreatedonSinkModifiedOntitlecaltype
e64650d3-94fb-ec11-82e6-0022481b14fc04/07/202216/01/2023 14:37:14PartnerEnterprise
8b97aa35-1d81-e811-a95c-00224800c9ff06/07/201816/01/2023 14:37:14PartnerEnterprise
bd97aa35-1d81-e811-a95c-00224800c9ff06/07/201817/01/2023 18:08:12PartnerEnterprise
42b5f518-1d81-e811-a95c-00224800c9ff06/07/201817/01/2023 18:08:12PartnerEnterprise
8ab2abf9-6169-ec11-8943-000d3a870a5b30/12/202116/01/2023 14:37:14PartnerBasic
2d51010f-1d81-e811-a95c-00224800c9ff06/07/201816/01/2023 14:37:14PartnerEnterprise
40e1feb7-efa5-e811-a96b-00224800cdc222/08/201816/01/2023 14:37:14PartnerEnterprise
d3320875-1e81-e811-a95c-00224800cc9706/07/201817/01/2023 18:08:12PartnerEnterprise
1ea0055a-1d81-e811-a95c-00224800c9ff06/07/201816/01/2023 14:37:14PartnerEnterprise
81cf613f-1e81-e811-a95c-00224800cc9706/07/201817/01/2023 18:08:12PartnerEnterprise
fb50010f-1d81-e811-a95c-00224800c9ff06/07/201816/01/2023 14:37:14PartnerEnterprise
af4a3b88-1d81-e811-a95c-00224800c4f106/07/201816/01/2023 14:37:14PartnerEnterprise
0551010f-1d81-e811-a95c-00224800c9ff06/07/201816/01/2023 14:37:14PartnerEnterprise
8c20f753-5a78-e811-a95b-00224800c3e825/06/201816/01/2023 14:37:14PartnerEnterprise
e597aa35-1d81-e811-a95c-00224800c9ff06/07/201816/01/2023 14:37:14PartnerEnterprise
0adad377-b039-e911-a999-00224800c9f426/02/201916/01/2023 14:37:14PartnerEnterprise
3315cd94-1d81-e811-a95c-00224800c4f106/07/201816/01/2023 14:37:14PartnerEnterprise
151ca1a8-a586-e811-a95c-00224800c4f113/07/201816/01/2023 14:37:14PartnerEnterprise
55ce798d-2081-e811-a95c-00224800cc9706/07/201817/01/2023 18:08:12PartnerEnterprise
55ce798d-2081-e811-a95c-00224800cc9706/07/201816/01/2023 13:37:09PartnerEnterprise
6fa9fe08-1d81-e811-a95c-00224800c9ff06/07/201816/01/2023 14:37:14PartnerEnterprise
8197aa35-1d81-e811-a95c-00224800c9ff06/07/201816/01/2023 14:37:14PartnerEnterprise
4151010f-1d81-e811-a95c-00224800c9ff06/07/201816/01/2023 14:37:14PartnerEnterprise
74cf613f-1e81-e811-a95c-00224800cc9706/07/201816/01/2023 14:37:14PartnerEnterprise

执行以下PySpark代码去重后未返回任何行,怀疑问题与SinkModifiedOn字段相关:

from pyspark.sql.window import Window
from pyspark.sql.functions import row_number

df2 = partdf.withColumn("rn", row_number().over(Window.partitionBy("Id","CreatedOn").orderBy("SinkModifiedOn")))
df3 = df2.filter("rn = 1").drop("rn")

问题原因分析

  • 列名大小写不匹配:DataFrame中的列名为createdon(全小写),但代码中partitionBy使用的是CreatedOn(首字母大写)。Spark默认列名区分大小写,这会导致窗口函数无法正确识别分区列,引发异常后最终无数据返回。
  • 日期字段类型隐患:SinkModifiedOn当前是字符串类型,按字符串排序可能出现逻辑错误(比如按字符逐个比较而非时间先后),虽不会直接导致无结果,但会影响去重结果的准确性。

修复方案

方案1:修正列名大小写

将代码中的CreatedOn改为createdon,匹配DataFrame实际列名:

from pyspark.sql.window import Window
from pyspark.sql.functions import row_number

df2 = partdf.withColumn("rn", row_number().over(Window.partitionBy("Id","createdon").orderBy("SinkModifiedOn")))
df3 = df2.filter("rn = 1").drop("rn")

方案2:优化日期排序逻辑(可选)

将SinkModifiedOn转换为日期时间类型后再排序,确保排序逻辑符合时间先后:

from pyspark.sql.window import Window
from pyspark.sql.functions import row_number, to_timestamp

# 转换字符串为日期时间类型
partdf = partdf.withColumn("SinkModifiedOn", to_timestamp("SinkModifiedOn", "dd/MM/yyyy HH:mm:ss"))

# 执行去重
df2 = partdf.withColumn("rn", row_number().over(Window.partitionBy("Id","createdon").orderBy("SinkModifiedOn")))
df3 = df2.filter("rn = 1").drop("rn")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:35:21