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

使用PySpark读取CSV时,末尾引号前反斜杠的解析问题

CSV解析问题:兼容Excel的转义规则处理

原始CSV内容

DoctorName, Description, Salary
"Dr. Jason BAH\","",138.42200000000000000000
"Dr. \"Sleep\" MAH","",200.42200000000000000000

当前读取配置(Spark)

option("quote", '"').option("multiline", True).option("header", True).option("escape", "\\")

错误解析结果

DoctorNameDescriptionSalary
Dr. Jason BAH"",""138.422null
Dr. "Sleep" MAHnull200.422

期望解析结果

DoctorNameDescriptionSalary
Dr. Jason BAH\null138.422
Dr. "Sleep" MAHnull200.422

参数分析与解决方案

当前参数问题

你设置的escape="\\"是错误的:这个参数会让Spark把反斜杠当作转义字符,导致第一行中\"被解析为单个双引号,而非保留反斜加拉引号的原始内容。此时Spark会误判第一个字段的闭合位置,将后续的","也纳入DoctorName字段,最终造成列错位。

而Excel采用CSV的传统兼容规则:

  • 仅用连续两个双引号表示字段内部的单个双引号
  • 反斜杠被视为普通字符,不需要作为转义符

解决步骤

  1. 移除escape参数:让Spark不再将反斜杠当作转义字符,而是作为普通内容保留
  2. 保留其他必要参数:维持quote='"'(双引号作为字段包围符)、header=True、multiline=True(若有跨行字段需求)

调整后的读取配置:

option("quote", '"').option("multiline", True).option("header", True)

补充说明

如果CSV中存在字段内部的双引号(比如第二行的"Sleep"),标准CSV格式应该用连续两个双引号表示(即"Dr. ""Sleep"" MAH"),这样Excel和Spark都能正常解析。如果原始文件中是\"格式,这其实不符合标准CSV规范,Excel能解析是因为做了容错处理,此时你可能需要先预处理CSV内容,将\"替换为""后再读取。


内容的提问来源于stack exchange,提问作者João Miguens

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:08:08