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

spark.read.csv与pandas read_csv读取CSV条目数差异原因分析

行数差异核心原因

二者返回行数不一致的根本原因是CSV解析器的默认配置不同,对引号包裹的跨行文本字段处理逻辑存在差异,和数据集本身、文件下载完整性无关:

  • pandas的read_csv默认遵循标准RFC 4180 CSV解析规则:如果字段被双引号完整包裹,字段内部的换行符会被识别为文本内容的一部分,不会被判定为行分隔符。你读取的是女装电商评论数据集,其中Review Text列是用户自由填写的评论文本,大量评论内容包含自然换行,pandas会正确将这类跨行评论识别为单条记录,返回的23486行是数据集的真实行数。
  • spark.read.csv默认未开启跨行字段解析,对应参数multiLine默认值为False。该模式下Spark解析时不会跟踪当前读取位置是否处于引号包裹的字段内,只要遇到换行符就直接切分新行,导致所有带内部换行的评论都被从换行位置硬拆成多条独立记录,最终统计出的26928行是被错误切分后的虚高结果。
修复方案

读取时给Spark的csv读取方法加上multiLine=True参数,开启跨行字段解析能力,即可得到和pandas完全一致的正确结果:

df = spark.read.csv(
    SparkFiles.get("Womens Clothing E-Commerce Reviews.csv"), 
    header=True,
    multiLine=True
).drop('_c0')

print(df.count(), len(df.columns))
# 运行结果为 (23486, 10),与pandas读取结果、数据集官方标注行数一致

补充说明:如果遇到字段内存在双引号转义的场景,还需要对齐两个工具的quote、escape参数配置,但本次场景下的行数差异完全由multiLine默认值不同导致,不需要额外调整其他参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:27:17