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

Parquet转CSV报AnalysisException不支持array<struct>类型问题求助

报错原因

CSV属于二维表格格式,仅支持字符串、数值、布尔等基础标量数据类型,你当前数据中的workExperience字段为数组嵌套结构体的复合类型,CSV数据源原生不支持该类结构的直接写入。

解决方案

你可以根据使用场景选择以下任意一种处理方式:

  • 方案1:展开复合字段,保留明细粒度(适合后续需要基于工作经历做统计分析的场景)
    先将workExperience数组按元素拆分为多行,再把结构体的每个字段提取为独立的扁平列,再写入CSV。PySpark实现代码如下:

    from pyspark.sql import functions as F
    
    # 读取原始parquet文件
    df = spark.read.parquet("你的输入parquet文件路径")
    
    # 炸开数组,每个工作经历单独占一行
    df_exploded = df.withColumn("work_exp_item", F.explode_outer(F.col("workExperience")))
    
    # 提取结构体字段为独立列
    df_flat = df_exploded.select(
        "_id",
        "Locale",
        F.col("work_exp_item.company").alias("work_company"),
        F.col("work_exp_item.dateRange").alias("work_date_range"),
        F.col("work_exp_item.description").alias("work_description"),
        F.col("work_exp_item.location").alias("work_location"),
        F.col("work_exp_item.title").alias("work_title")
    )
    
    # 写入CSV,带表头
    df_flat.write.csv("你的输出CSV路径", header=True, encoding="utf-8")
    
  • 方案2:序列化复合字段为JSON字符串(适合需要保留原数据行粒度,不想拆分原有记录的场景)
    直接将整个workExperience字段转为JSON格式的字符串,再写入CSV,后续使用时可再解析JSON字符串恢复原有结构。
    PySpark实现代码:

    from pyspark.sql import functions as F
    
    df = spark.read.parquet("你的输入parquet文件路径")
    
    # 将复合字段转为JSON字符串
    df_processed = df.withColumn("workExperience", F.to_json(F.col("workExperience")))
    
    # 写入CSV
    df_processed.write.csv("你的输出CSV路径", header=True, encoding="utf-8")
    

    小文件场景下用Pandas实现的代码:

    import pandas as pd
    import json
    
    df = pd.read_parquet("你的输入parquet文件路径")
    df["workExperience"] = df["workExperience"].apply(lambda x: json.dumps(x, ensure_ascii=False))
    df.to_csv("你的输出CSV路径", index=False, encoding="utf-8-sig")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:06:01