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

使用PySpark的spark.read.csv读取CSV文件时的格式问题求助

解决PySpark读取CSV时列错位及多余引号问题

问题根源

你的CSV文件中review字段包含带引号的多行文本,PySpark默认CSV解析器未正确识别这种格式:

  • 把字段内的换行当成行分隔符,导致列错位(sentiment列出现review内容)
  • 未正确处理字段内的转义引号,导致残留多余引号

解决方案

1. 配置CSV读取参数(核心解决方法)

在spark.read.csv中添加以下关键参数,让解析器正确识别带引号的多行字段:

df = spark.read.csv(
    "你的文件路径.csv",
    header=True,  # 仅当CSV有表头时启用
    inferSchema=True,
    quote='"',          # 指定字段包裹符为双引号
    escape='"',         # 指定转义字符为双引号(处理字段内的双引号)
    multiLine=True      # 允许字段跨多行解析
)
  • multiLine=True:解决行错位问题,告诉Spark不要把字段内的换行当作新行
  • escape='"': 让Spark识别字段内的转义引号(例如"He said ""hello"""会被解析为He said "hello")
  • quote='"': 明确指定字段的包裹符号,避免解析歧义

2. 清理残留的多余引号

如果配置参数后仍有首尾引号残留,用正则表达式清理:

from pyspark.sql.functions import regexp_replace

df = df.withColumn(
    "review",
    regexp_replace("review", '^"|"$', '')  # 移除字段首尾的双引号
)

3. 排查额外可能问题

  • 确认CSV的分隔符:如果不是逗号,添加sep参数(例如sep="\t"表示制表符分隔)
  • 检查表头:如果CSV没有表头,不要设置header=True,否则会把第一行数据当作表头导致列错位

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:52:58