PySpark读取CSV时字段内嵌转义引号识别错误如何解决?
问题根因
你遇到的解析错误是因为目标CSV不符合RFC4180标准CSV格式,默认的Spark CSV解析器会将Sample Company后的"识别为字段闭合标记,后续的逗号就会触发列拆分,无法识别为字段内部内容。
解决方案
方案1:整行读取自定义解析(最稳妥,适配所有非标准格式)
直接关闭Spark的自动列拆分逻辑,先整行读取所有内容,再自行实现解析规则,适配你当前的引号格式:
from pyspark.sql.functions import col, regexp_replace # 整行读取CSV文件,不做自动拆分 df_raw = spark.read.text(path_to_csv) # 提取并过滤表头(如果CSV包含表头) header = df_raw.first()[0] df_data = df_raw.filter(col("value") != header) # 自定义规则解析单列内容,可根据实际格式调整正则 df_parsed = df_data.withColumn( "your_column_name", # 匹配开头两个双引号+内容+末尾一个双引号,提取中间内容 regexp_replace(col("value"), r'^""(.*)"$', r"$1") ) # 注册临时表 df_parsed.createOrReplaceTempView("table_name")
如果有多列解析需求,可以自定义UDF实现更复杂的拆分规则,灵活性远高于默认CSV解析器。
方案2:调整Spark CSV解析参数(适配3.0+版本)
如果你使用的是Spark 3.0及以上版本,可以新增charToEscapeQuoteEscaping参数,适配连续双引号的转义规则:
spark.read.format('csv')\ .option('header', 'true')\ .option('inferschema', True)\ .option('quote', '"')\ .option('escape', '"')\ .option('charToEscapeQuoteEscaping', '"')\ .load(path_to_csv)\ .createOrReplaceTempView('table_name')
该参数用于指定转义quote转义符的字符,可兼容你当前的非标准转义格式。
内容的提问来源于stack exchange,提问作者Max_Process
相关产品推荐
相关产品推荐

