PySpark中格式为2023-03-02T07:32:00+00:00的字符串转Timestamp返回Null的解决方法
解决PySpark中"2023-03-02T07:32:00+00:00"格式字符串转Timestamp返回Null的问题
你遇到的核心问题是时间戳格式符不匹配:你的字符串末尾是**+00:00**这种带冒号的UTC偏移格式,之前用的'x'、'Z'都不符合该格式的解析规则,导致解析失败返回Null。下面是两种可行的解决方法:
方法1:指定正确的格式符解析
用to_timestamp函数,搭配对应带冒号时区偏移的格式符XXX:
from pyspark.sql.functions import to_timestamp, col display(df.withColumn("converted_ts", to_timestamp(col("timestamp"), "yyyy-MM-dd'T'HH:mm:ssXXX")))
XXX格式符专门匹配+00:00/-08:00这类带冒号的时区偏移格式,刚好对应你的时间戳字符串。
方法2:利用Spark自动解析(Spark 3.0+适用)
Spark 3.0及以上版本的to_timestamp可以自动识别ISO 8601标准格式的时间字符串,无需手动指定格式:
from pyspark.sql.functions import to_timestamp, col display(df.withColumn("converted_ts", to_timestamp(col("timestamp"))))
之前方法失败的原因
- 方法1误用了
from_utc_timestamp:这个函数的作用是将已解析的UTC时间转换为指定时区的时间,不是用来解析字符串的;同时格式符'x'对应不带冒号的偏移(如+0000),和你的+00:00不匹配。 - 方法2用
'Z'格式符:Z仅匹配末尾是Z的UTC时间(如2023-03-02T07:32:00Z),无法识别+00:00格式的偏移。
内容的提问来源于stack exchange,提问作者rakk
相关产品推荐
相关产品推荐

