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

使用PySpark将字符串转换为DateTime时未生效,请求排查问题

PySpark字符串转DateTime问题排查

输入数据

+--------------+
|        col1  |
+--------------+
|18300031121994|
|18300031122018|
|12324031012020|
|19590031052020|
|19590030062020|
+--------------+

期望输出

col1
1994-12-31 18:30:00
2018-12-31 18:30:00
2020-01-31 12:32:40
2020-05-31 19:59:00
2020-06-30 19:59:00

问题代码

df.select(col("col1"),to_date(col("col1"),"hhmmssMMddyyyy").alias("datetime")).show()

错误原因

你的代码存在两个关键问题:

  • 函数选择错误:to_date仅能将字符串转换为日期类型(仅含年月日),无法保留时分秒信息,而你需要的是包含完整时间的DateTime类型。
  • 格式字符串不匹配:输入字符串的结构是时分秒日月年(例如18300031121994对应18时30分00秒 31日12月1994年),但你使用的格式hhmmssMMddyyyy把月份(MM)和日期(dd)的顺序写反了,导致解析失败,最终直接返回原始字符串。

修正方案

使用to_timestamp函数替代to_date,并调整格式字符串为正确的HHmmssddMMyyyy:

from pyspark.sql.functions import col, to_timestamp

df.select(
    col("col1"),
    to_timestamp(col("col1"), "HHmmssddMMyyyy").alias("datetime")
).show(truncate=False)

说明

  • to_timestamp:生成包含年月日时分秒的Timestamp类型,符合你的期望输出格式。
  • HHmmssddMMyyyy:对应输入字符串的结构:
    • HH:24小时制的小时(适配18、19这类大于12的小时数)
    • mm:分钟
    • ss:秒
    • dd:日期
    • MM:月份
    • yyyy:年份

执行修正后的代码,即可得到符合预期的DateTime类型输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 20:35:28