如何在PySpark中从字符串类型时间列提取年和月?
解决Spark字符串时间戳提取年份问题
你的字符串格式2022-04-01T00:00:00.000+0000是带毫秒和时区偏移的ISO时间格式,之前的方法失败是因为格式匹配错误,试试以下两种有效方法:
方法1:指定完整格式解析
使用to_timestamp匹配完整的时间格式,再提取年份:
// Scala 版本 .withColumn("year", year(to_timestamp(col("full_time"), "yyyy-MM-dd'T'HH:mm:ss.SSSZ")))
# PySpark 版本 from pyspark.sql.functions import year, to_timestamp, col df = df.withColumn("year", year(to_timestamp(col("full_time"), "yyyy-MM-dd'T'HH:mm:ss.SSSZ")))
格式说明:
yyyy-MM-dd:日期部分'T':固定分隔符(需用单引号包裹)HH:mm:ss.SSS:时分秒+毫秒Z:时区偏移量(对应+0000)
方法2:自动解析ISO格式(Spark 3.0+)
如果你的Spark版本在3.0及以上,无需指定格式,to_timestamp能自动识别这种标准ISO时间字符串:
// Scala 版本 .withColumn("year", year(to_timestamp(col("full_time"))))
# PySpark 版本 df = df.withColumn("year", year(to_timestamp(col("full_time"))))
为什么之前的方法无效?
- 第一种方法用
to_date只指定了yyyy-MM-dd格式,无法匹配原字符串中T之后的时间和时区部分,导致解析失败。 - 第二种方法直接用
to_date指定yyyy格式,完全不符合原字符串的结构,自然无法正确解析。
内容的提问来源于stack exchange,提问作者Marcos Dias
相关产品推荐
相关产品推荐

