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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:15:39