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

PySpark读取嵌套JSON文件时使用explode函数报错的技术咨询

解决Spark读取嵌套JSON时explode报错的问题

我来帮你搞定这个问题!你之所以会报错,核心原因很明确:explode函数只能处理数组(array)或者映射(map)类型的列,但你的Department字段是一个结构体(struct)类型,直接对它用explode肯定会触发数据类型不匹配的错误。

先拆解下你的JSON结构:Department是包含DepartmentID和Student的结构体,而Student里的Subjects才是数组类型——这才是explode能处理的目标字段。

修正后的完整代码

from pyspark.sql import SparkSession
from pyspark.sql.functions import col, explode

spark = SparkSession.builder.appName('Reminder').master('local').getOrCreate()

if __name__ == '__main__':
    # 读取JSON文件,multiline=True确保读取完整的多行JSON
    df = spark.read.option("multiline","true").json("C:\\Workspace\\student1.json").cache()
    
    print("初始数据结构:")
    df.printSchema()
    
    # 第一步:展开Department结构体的子字段
    df_expand_struct = df.select(
        "Univerity",
        col("Department.DepartmentID").alias("DepartmentID"),
        col("Department.Student.lastName").alias("lastName"),
        col("Department.Student.address").alias("address"),
        col("Department.Student.email").alias("email"),
        col("Department.Student.Subjects").alias("Subjects")
    )
    
    print("\n展开结构体后的DataFrame:")
    df_expand_struct.show(truncate=False)
    
    # 第二步:用explode展开Subjects数组
    df_explode_subjects = df_expand_struct.withColumn("Subject", explode(col("Subjects"))).drop("Subjects")
    
    # 第三步:展开Subject结构体的子字段,得到最终扁平化的DataFrame
    df_final = df_explode_subjects.select(
        "Univerity", "DepartmentID", "lastName", "address", "email",
        col("Subject.subjectId").alias("subjectId"),
        col("Subject.subjectName").alias("subjectName")
    )
    
    print("\n最终扁平化后的结果:")
    df_final.show(truncate=False)

关键操作说明

  1. 结构体字段提取:对于struct类型的字段,直接用.运算符访问子字段即可,比如Department.DepartmentID就能提取出部门ID,不需要用explode。
  2. 数组展开时机:只有当字段是array/map类型时,才能使用explode——这里的Subjects是数组,对它用explode可以把每个数组元素拆成单独的行。
  3. 多层嵌套处理逻辑:面对嵌套JSON要逐层拆解,先展开外层结构体,再处理内层数组,最后再展开数组内的结构体字段,最终得到完全扁平化的结果。

运行这段代码后,你就能得到预期的结构化数据,不会再出现类型不匹配的报错了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 21:54:06