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

如何用PySpark将DataFrame数组嵌套结构体的size字段从String转Float?

解决PySpark数组中结构体字段类型转换问题

你尝试的代码无法生效,是因为withField方法用于修改顶层的结构体列,而received是一个数组列,数组中的每个元素才是结构体,不能直接对数组列使用withField。

要将received数组内每个结构体的size字段从string转为float,需要使用transform函数遍历数组中的每个结构体元素,再修改目标字段:

from pyspark.sql import functions as SF

# 转换数组内结构体的size字段类型
df = df.withColumn(
    "received",
    SF.transform(
        "received",
        lambda struct_elem: struct_elem.withField("size", struct_elem["size"].cast("float"))
    )
)

代码说明

  • SF.transform("received", ...):遍历received数组的每一个元素(即结构体)
  • lambda struct_elem: ...:对每个结构体元素执行操作
  • struct_elem.withField("size", ...):修改当前结构体的size字段,通过cast("float")将原string类型转为float类型

执行后可以用df.printSchema()验证,received数组内结构体的size字段类型会变为float (nullable = true)。

内容的提问来源于stack exchange,提问作者José Henrique Davino

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:45:50