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

Pyspark嵌套JSON字符串列Schema定义及常见报错解决

错误原因分析
  • 第一种写法错误:你错误地将数组类型的vals字段声明为StructType,且StructType内直接嵌套StructType而非带name属性的StructField,因此触发no attribute 'name'报错。同时你不需要为数组内的两个元素重复定义两次结构,JSON数组内的元素结构统一,仅需定义一次元素结构即可。
  • 第二种写法错误:ArrayType仅接收2~3个参数:第一个为数组元素的类型,第二个为数组本身是否可空,你重复传入了两次ArrayType作为参数,参数数量超出限制因此报错。
正确Schema定义

首先导入需要的类型:

from pyspark.sql.types import StructType, StructField, StringType, IntegerType, ArrayType, DoubleType

正确的Schema写法如下:

schema = StructType([
    # Day字段在JSON中为数值类型,也可根据需要改为StringType
    StructField("Day", IntegerType(), True),
    # vals是数组,ArrayType内部指定数组元素的结构即可
    StructField(
        "vals",
        ArrayType(
            StructType([
                StructField("id", StringType(), True),
                # 注意JSON中val是字符串格式的数值,Pyspark会自动隐式转换为DoubleType,转换失败会返回null
                StructField("val", DoubleType(), True)
            ]),
            True # 整个vals数组是否可空
        ),
        True
    )
])
使用示例(解析字符串类型的body列)

如果你的body列是字符串格式的JSON,可以用from_json函数解析:

from pyspark.sql.functions import from_json

df = df.withColumn("parsed_body", from_json("body", schema))

解析后可以通过parsed_body.Day、parsed_body.vals访问对应字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:06:04