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

导出DataFrame至CSV时如何正确处理双引号问题

解决Spark导出CSV时双引号显示异常的问题

你的问题出在手动提前替换双引号上——Spark的CSV写入器本身已经完全遵循CSV规范处理双引号转义,手动替换会导致重复转义,最终出现异常显示。

问题分析

当你用regexp_replace把单个双引号替换为两个后,Spark CSV Writer在导出时会再次对双引号进行转义(CSV规范要求字段内的双引号用两个双引号表示),相当于把原本的"变成"",再转义一次变成"""",最终输出的内容就会出现多余的双引号。

正确解决方案

移除手动替换双引号的代码,直接依靠Spark CSV Writer的内置处理逻辑即可。以下是修正后的完整代码:

import org.apache.spark.sql.SparkSession

val spark = SparkSession.builder().appName("CSVExport").getOrCreate()
import spark.implicits._

// 原始DataFrame,包含逗号和双引号
val df = Seq((1, "A,B,C,\"DEF\""), (2, "DEF")).toDF("ID", "Val")

// 直接导出,无需手动处理双引号
df.coalesce(1).write
  .option("header", true)
  .option("encoding", "utf-8")
  .option("quoteAll", true) // 给所有字段添加引号,符合你的需求
  .option("escape", "\"") // 显式指定转义字符为双引号(默认就是该值,可省略)
  .mode("Overwrite")
  .csv("[Location to store csv]")

效果验证

导出后的CSV内容会符合预期:

ID,Val
"1","A,B,C,""DEF"""
"2","DEF"

这个格式完全符合CSV规范,任何标准的CSV解析器都能正确识别其中的双引号和逗号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:01:02