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

PySpark中字符串时间转Timestamp返回None的问题求助

问题排查与解决方案

方法1失败原因

你用的时间格式字符串完全不匹配目标格式:

  • 原时间字符串格式是yyyy-MM-dd HH:mm:ss,SSS(年份在前,毫秒用逗号分隔)
  • 但你传入的格式是MM-dd-yyyy HH:mm:ss.SSSS(月份在前,毫秒用点分隔,还多写了一位毫秒位),格式不匹配直接导致转换失败。

方法2失败原因

Spark默认的Timestamp解析规则不支持逗号分隔的毫秒,直接用.cast("timestamp")会因为格式不兼容返回null。

正确实现方式

方式1:修正to_timestamp的格式参数

直接指定和原字符串匹配的格式即可,注意毫秒部分是逗号:

from pyspark.sql.functions import col, regexp_extract, to_timestamp

sparkDF.withColumn(
    "TIMESTAMP",
    to_timestamp(
        regexp_extract(col('message'), r'(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2},\d+)', 1),
        "yyyy-MM-dd HH:mm:ss,SSS"
    )
).show()

方式2:替换逗号为点后再转换

先把时间字符串里的逗号换成点,再进行类型转换:

from pyspark.sql.functions import col, regexp_extract, regexp_replace

sparkDF.withColumn(
    "TIMESTAMP",
    regexp_replace(
        regexp_extract(col('message'), r'(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2},\d+)', 1),
        ",", "."
    ).cast("timestamp")
).show()

最终效果

两种方法都会生成正确的Timestamp列:

+--------------------+-------+-------------------+
|             message|  class|          TIMESTAMP|
+--------------------+-------+-------------------+
|2022-10-28 07:46:...|classA|2022-10-28 07:46:59.705|
|2022-10-27 10:03:...|classB|2022-10-27 10:03:59.800|
+--------------------+-------+-------------------+

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:40:49