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

PySpark DataFrame字符串转时间戳:如何保留秒后微秒部分?

解决PySpark保留微秒的时间戳转换问题

你的问题出在格式字符串的微秒写法,以及月份缩写的locale匹配上。

正确的转换方法

要完整保留微秒并成功解析,需使用ddMMMyyyy:HH:mm:ss.SSSSSS作为格式字符串,同时指定英文locale(因为日期字符串中的月份是英文缩写JUL)。代码示例:

from pyspark.sql.functions import to_timestamp

# 指定英文locale解析英文月份缩写
df = df.withColumn('date_timestamp', to_timestamp('date_string', 'ddMMMyyyy:HH:mm:ss.SSSSSS', 'en_US'))

为什么之前的尝试失败

  1. 微秒丢失:使用ddMMMyyyy:HH:mm:ss格式时,因未包含微秒匹配规则,Spark会自动截断秒后的小数部分,导致微秒丢失。
  2. 返回null:
    • ddMMMyyyy:HH:mm:ss.nnnnnn:nnnnnn不是合法的日期格式符,Spark无法识别。
    • ddMMMyyyy:HH:mm:ss.SSSSSS:格式符本身正确,但你的Spark环境默认locale可能非英文,无法解析JUL这类英文月份缩写,导致解析失败。
    • ddMMMyyyy:HH:mm:ss.SSS:仅匹配3位毫秒,而你的字符串是6位微秒,格式不匹配导致解析失败。

验证结果

执行正确代码后,date_timestamp列会完整保留微秒部分:

+----------------------------+----------------------------+
|                 date_string|              date_timestamp|
+----------------------------+----------------------------+
|   22JUL2020:20:35:36.009269|2020-07-22 20:35:36.009269  |
|   22JUL2020:20:41:45.483747|2020-07-22 20:41:45.483747  |
+----------------------------+----------------------------+

内容的提问来源于stack exchange,提问作者Julian David Organista Caldero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:05:26