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

Apache Spark如何将含JSON字符串列的DataFrame保存为无转义JSON文件

解决方案

你遇到的问题核心是JSON字符串列没有被Spark识别为结构化类型,导出时会被当做普通字符串加转义处理,可根据你的JSON结构灵活选择以下两种方案:

方案1:解析JSON字符串为结构化类型导出(推荐)

适合JSON结构大体一致,仅存在少量自定义额外字段的场景,解析后仍可对JSON内部字段做数据处理。

实现代码:

import org.apache.spark.sql.functions.{from_json, schema_of_json}

// 从样本数据自动推断JSON结构,无需手动编写Schema
val jsonSchema = schema_of_json(df.select("json").head().getString(0))

// 解析JSON字符串列为结构化类型,开启允许额外字段配置,避免自定义字段丢失
val parsedDf = df.withColumn("json", from_json($"json", jsonSchema, Map("allowExtraFields" -> "true")))

// 直接导出为JSON即可得到原生嵌套结构
parsedDf.write.json("你的输出路径")

方案2:手动拼接JSON字符串导出

适合每行JSON结构差异极大,无法用统一Schema解析的场景,可100%保留原JSON内容。

实现代码:

import org.apache.spark.sql.functions.{concat_ws, lit}

// 手动拼接符合要求的完整JSON字符串
val resultDf = df.select(
  concat_ws("",
    lit("{\"id\":"),
    $"id",
    lit(",\"json\":"),
    $"json",
    lit("}")
  ).alias("value")
)

// 以文本格式导出,不会增加额外转义
resultDf.write.text("你的输出路径")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:03:02