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

PySpark中字符串转Timestamp返回None的问题求解

PySpark字符串转Timestamp(UTC优先)解决方案

问题根源

转换后出现None主要有两个核心原因:

  • 列名大小写不匹配:你的DataFrame列名是Time1/Time2(首字母大写),但代码中用了小写的time1/time2,导致无法匹配目标列。
  • 时间格式字符串不匹配:Time2的时区格式是±HH:mm,对应的格式符不是Z(Z对应±HHmm格式),需要用XXX来匹配带冒号的时区偏移。

修正后的代码

1. 处理Time1(带微秒的时间转UTC)

Time1无时区信息,默认按Session时区解析,要转为UTC需先解析再转换时区:

from pyspark.sql import functions as F

# 覆盖原列:解析Time1为Timestamp,再转UTC
mydataframe = mydataframe.withColumn(
    "Time1", 
    F.to_utc_timestamp(F.to_timestamp(F.col("Time1"), "yyyy-MM-dd HH:mm:ss.SSSSSS"), "UTC")
)

2. 处理Time2(带时区偏移的时间转UTC)

Time2自带时区偏移,用正确格式符解析后转UTC:

# 覆盖原列:匹配±HH:mm时区格式解析,再转UTC
mydataframe = mydataframe.withColumn(
    "Time2", 
    F.to_utc_timestamp(F.to_timestamp(F.col("Time2"), "yyyy-MM-dd HH:mm:ssXXX"), "UTC")
)

完整执行示例

from pyspark.sql import functions as F

# 批量处理两列
mydataframe = mydataframe \
    .withColumn("Time1", F.to_utc_timestamp(F.to_timestamp(F.col("Time1"), "yyyy-MM-dd HH:mm:ss.SSSSSS"), "UTC")) \
    .withColumn("Time2", F.to_utc_timestamp(F.to_timestamp(F.col("Time2"), "yyyy-MM-dd HH:mm:ssXXX"), "UTC"))

验证效果

执行后,原字符串列会被替换为UTC时区的Timestamp类型,不会再出现None值。例如原Time2值2022-04-23 17:30:22-07:00会被转为UTC时间2022-04-24 00:30:22。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 05:05:15