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

PySpark中转换Struct内Date字段时保留Struct类型的方法

问题描述

原DataFrame的Schema如下:

|—- id: long
|—- user: struct
     |—- name: string
     |—- date: string

执行以下代码后:

df = df.select(
            F.col("id"),
            F.col("user.name"),
            F.col("user.date").cast("date")
     )

得到的Schema变成了:

|—- id: long
|—- user.name: string
|—- user.date: date

如何在转换user.date字段类型的同时,不丢失user的struct结构?期望的输出Schema为:

|—- id: long
|—- user: struct
     |—- name: string
     |—- date: date
解决方案

方法1:用withColumn更新struct内部字段

直接通过withColumn重新构建user结构体,保留原有字段并转换date类型:

from pyspark.sql import functions as F

df = df.withColumn(
    "user",
    F.struct(
        F.col("user.name"),
        F.col("user.date").cast("date").alias("date")
    )
)

方法2:用select配合struct重构字段

如果需要同时指定顶级字段(比如id),可以在select语句里直接组合新的user结构体:

df = df.select(
    F.col("id"),
    F.struct(
        F.col("user.name"),
        F.col("user.date").cast("date").alias("date")
    ).alias("user")
)

两种方法都能在完成date字段类型转换的同时,保留user的struct层级结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 14:00:13