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

PySpark DataFrame日期修复:将早于1900年的时间戳设为最小值或空值

PySpark 原生函数实现异常时间戳修正

针对timestamp类型列RECEIPTDATEREQUESTED中小与1900-01-01的异常值修正需求,无需自定义UDF,直接使用Spark内置的when条件函数即可实现,性能远高于Python UDF,代码更简洁。

方案1:小于阈值的时间统一设置为1900-01-01 00:00:00

from pyspark.sql import functions as F

# 定义合法时间的最小阈值
min_valid_ts = F.to_timestamp(F.lit("1900-01-01 00:00:00"))

# 替换异常值
bdf = olddf.withColumn(
    "RECEIPTDATEREQUESTED",
    F.when(F.col("RECEIPTDATEREQUESTED") < min_valid_ts, min_valid_ts)
    .otherwise(F.col("RECEIPTDATEREQUESTED"))
)

方案2:小于阈值的时间统一设置为null

只需要修改when的返回值即可:

from pyspark.sql import functions as F

min_valid_ts = F.to_timestamp(F.lit("1900-01-01 00:00:00"))

bdf = olddf.withColumn(
    "RECEIPTDATEREQUESTED",
    F.when(F.col("RECEIPTDATEREQUESTED") >= min_valid_ts, F.col("RECEIPTDATEREQUESTED"))
    .otherwise(F.lit(None).cast("timestamp"))
)

方案优势

  • 完全基于Spark原生函数执行,全程在JVM进程内计算,避免Python UDF的进程通信开销,大数据量下性能提升非常显著
  • 无需自定义函数、注册UDF,代码更简洁易维护
  • 针对已定义为timestamp类型的列,自动兼容类型校验,无需额外处理Python层面的异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:24:02