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

PySpark中时间戳列转换为null的原因及解决方法

PySpark中to_timestamp返回null的原因及解决办法

问题场景

在Azure Databricks的Python笔记本中运行以下PySpark代码时,第三行的myTimeStampCol1字段返回null值:

代码示例

from pyspark.sql.functions import *
df=spark.createDataFrame(data = [ ("1","Arpit","2021-07-24 12:01:19.000"),("2","Anand","2019-07-22 13:02:20.000"),("3","Mike","11-16-2021 18:00:08")],
schema=["id","Name","myTimeStampCol"])
df.select(col("myTimeStampCol"),to_timestamp(col("myTimeStampCol"),"yyyy-MM-dd HH:mm:ss.SSSS").alias("myTimeStampCol1")).show()

运行输出

+--------------------+-------------------+
|myTimeStampCol      | myTimeStampCol1|
+--------------------+-------------------+
|2021-07-24 12:01:...|2021-07-24 12:01:19|
|2019-07-22 13:02:...|2019-07-22 13:02:20|
| 11-16-2021 18:00:08|               null|
+--------------------+-------------------+

实际场景为导入百万级数据文件,其中日期列格式统一为MM-dd-yyyy HH:mm:ss。

原因分析

  • 第三行的时间字符串格式是MM-dd-yyyy HH:mm:ss,但代码中to_timestamp指定的解析格式是yyyy-MM-dd HH:mm:ss.SSSS,格式完全不匹配,导致解析失败返回null。
  • 前两行的时间字符串是yyyy-MM-dd HH:mm:ss.SSSS格式(带毫秒后缀),和指定的解析格式匹配,所以能正常转换为时间戳。

解决办法

由于实际数据的日期格式统一为MM-dd-yyyy HH:mm:ss,同时存在部分数据带毫秒后缀的情况,可使用可选格式语法(用方括号包裹可选部分)来兼容两种格式,修改to_timestamp的格式参数即可:

修改后的代码

from pyspark.sql.functions import *
df=spark.createDataFrame(data = [ ("1","Arpit","2021-07-24 12:01:19.000"),("2","Anand","2019-07-22 13:02:20.000"),("3","Mike","11-16-2021 18:00:08")],
schema=["id","Name","myTimeStampCol"])
# 使用兼容带/不带毫秒的格式模式
df.select(col("myTimeStampCol"),to_timestamp(col("myTimeStampCol"),"MM-dd-yyyy HH:mm:ss[.SSSS]").alias("myTimeStampCol1")).show()

预期输出

+--------------------+-------------------+
|myTimeStampCol      |myTimeStampCol1    |
+--------------------+-------------------+
|2021-07-24 12:01:...|2021-07-24 12:01:19|
|2019-07-22 13:02:...|2019-07-22 13:02:20|
|11-16-2021 18:00:08 |2021-11-16 18:00:08|
+--------------------+-------------------+

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 19:57:35