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

PySpark 3.x写JSON时数组列被额外添加双引号如何解决?

Spark 3.x写入JSON时数组列被额外添加双引号问题排查

问题产生原因

  • 最核心的原因是对应列的Schema实际为StringType而非你预期的ArrayType:通常是在数据转换环节,使用to_json等序列化函数处理数组后,没有将结果解析回结构化的数组类型,直接将字符串格式的数组存入了列中。Spark写入JSON时会将字符串值整体加双引号、转义内部的引号,最终呈现为外层多了双引号的异常格式。
  • 少数场景下配置异常导致:如果确认列Schema确实是ArrayType,则可能是开启了非默认的JSON写入配置,比如强制所有值加引号、开启了全量转义规则。

解决方案

方案1:修正列Schema为原生Array类型(90%以上场景适用)

使用from_json函数将存储JSON格式数组的字符串列转换为Spark原生的Array类型后再写入:

Scala版本示例

import org.apache.spark.sql.functions.from_json
import org.apache.spark.sql.types.{ArrayType, StringType}

// 替换array_col为你的异常列名,数组元素类型根据实际场景调整,此处以StringType为例
val correctedDf = df.withColumn("array_col", from_json($"array_col", ArrayType(StringType)))
correctedDf.write.json("Documents/abc")

PySpark版本示例

from pyspark.sql.functions import from_json
from pyspark.sql.types import ArrayType, StringType

# 替换array_col为你的异常列名,数组元素类型根据实际场景调整
corrected_df = df.withColumn("array_col", from_json("array_col", ArrayType(StringType())))
corrected_df.write.json("Documents/abc")

方案2:调整JSON写入配置(确认列Schema为ArrayType时适用)

如果确认列类型正确,写入时添加配置关闭不必要的引号转义即可:

df.write
  .option("escapeQuotes", "false")
  .option("quoteAll", "false")
  .json("Documents/abc")

PySpark使用方式一致,在write方法后追加对应option配置即可。

内容的提问来源于stack exchange,提问作者Hafiz Muhammad Shafiq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:18:06