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

PySpark中将yymmdd格式日期列转为dd-mm-YYYY格式报错如何解决?

PySpark 日期格式转换问题解决方案

报错原因

你调用Python原生datetime.strptime函数时传入的是字符串字面量"t_date",而非DataFrame中t_date列的实际值,函数直接解析字符串"t_date"本身与%y%m%d格式不匹配,因此抛出错误。PySpark的列操作不能直接使用Python原生函数作用于列名字符串,需要使用PySpark内置函数或自定义UDF实现列级别的计算。

推荐实现方案(内置函数,性能最优)

使用PySpark官方提供的日期处理函数,无需自定义逻辑,分布式执行效率远高于UDF:

  1. 先导入依赖函数
from pyspark.sql.functions import to_date, date_format
  1. 执行格式转换
df = df.withColumn(
    "modifiedDate",
    date_format(to_date("t_date", "yyMMdd"), "dd-MM-yyyy")
)
  1. 验证结果
    执行df.show()可得到如下输出:
+------+------------+
|t_date|modifiedDate|
+------+------------+
|210927|  27-09-2021|
+------+------------+

可选实现方案(UDF,仅推荐特殊逻辑使用)

如果需要使用Python原生datetime逻辑,可以自定义UDF实现,不推荐大规模数据集使用:

from pyspark.sql.functions import udf
from pyspark.sql.types import StringType
import datetime

# 定义日期转换UDF
def date_convert_udf(date_str: str) -> str:
    return datetime.datetime.strptime(date_str, "%y%m%d").strftime('%d-%m-%Y')

convert_udf = udf(date_convert_udf, StringType())

# 调用UDF生成新列
df = df.withColumn("modifiedDate", convert_udf("t_date"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:57:04