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

PySpark中如何将"20130623"格式字符串列转为dd-mm-YYYY格式?

解决方案:Spark日期格式转换(从"yyyyMMdd"到"dd-MM-yyyy")

你的问题根源在于误用了Python原生datetime模块处理Spark DataFrame列——这类Python函数只能处理单个值,无法直接操作DataFrame的列,而且你把列名col_name当成字符串传入int(),自然会触发"invalid literal"错误。

以下是两种可行的Spark原生方案,无需依赖pandas:

方案一:使用to_date + date_format(推荐)

先将字符串格式的日期转为Spark标准Date类型,再格式化为目标字符串格式:

from pyspark.sql.functions import to_date, date_format

# 链式调用直接生成目标列
df = df2.withColumn(
    "col_name_formatted",
    date_format(to_date(df2["col_name"], "yyyyMMdd"), "dd-MM-yyyy")
)
  • to_date(df2["col_name"], "yyyyMMdd"):识别原列的"20130623"格式(yyyyMMdd对应年-月-日的数字拼接),转为Spark Date类型
  • date_format(..., "dd-MM-yyyy"):将Date类型值格式化为"日-月-年"的字符串格式

方案二:使用unix_timestamp + from_unixtime

如果需要通过时间戳中转(不如方案一直观),可以这样写:

from pyspark.sql.functions import unix_timestamp, from_unixtime

df = df2.withColumn(
    "col_name_formatted",
    from_unixtime(unix_timestamp(df2["col_name"], "yyyyMMdd"), "dd-MM-yyyy")
)
  • unix_timestamp(...):将原日期字符串转为Unix时间戳
  • from_unixtime(...):将时间戳转为指定格式的字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 17:41:05