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
相关产品推荐
相关产品推荐

