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

PySpark如何从包含美元符号的Struct字段中提取日期值

PySpark如何从包含美元符号的Struct字段中提取日期值

嗨,我来帮你搞定这个问题!从带美元符号的Struct字段里取值确实有点小坑,不过PySpark里有几种简单的方法可以解决:

方法1:使用方括号语法访问特殊字段名

因为$date里的$是特殊字符,直接用.点语法(比如df.entrytimestamp.$date)会报错,这时候可以用方括号来访问子字段:

from pyspark.sql.functions import col

# 提取$date字段,并重命名为友好的名称
result_df = df.select(
    col("id"),
    col("PART_ID"),
    col("entrytimestamp")["$date"].alias("entry_date")
)

这样就能顺利取出entrytimestamp结构体里的$date值,而且如果entrytimestamp本身是null,提取结果也会自动是null,不用额外处理空值。

方法2:使用getItem()方法

另一种等价的方式是用Struct字段的getItem()方法,同样支持带特殊符号的字段名:

result_df = df.select(
    col("id"),
    col("PART_ID"),
    col("entrytimestamp").getItem("$date").alias("entry_date")
)

额外建议:将字符串日期转为Timestamp类型

你的$date字段是字符串格式(比如"2024-12-01 00:00:00.047+0000"),如果后续需要做日期相关的计算,可以把它转换成PySpark的Timestamp类型,用to_timestamp()函数配合对应的格式串即可:

from pyspark.sql.functions import to_timestamp

df_with_timestamp = df.select(
    col("id"),
    col("PART_ID"),
    to_timestamp(col("entrytimestamp")["$date"], "yyyy-MM-dd HH:mm:ss.SSSZ").alias("entry_timestamp")
)

这里的格式串"yyyy-MM-dd HH:mm:ss.SSSZ"完全匹配你的日期格式,其中SSS对应毫秒部分,Z对应时区偏移(比如+0000)。

备注:内容来源于stack exchange,提问作者user3008410

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 16:38:00