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

PySpark读取CSV行数多于Pandas的问题排查与解决咨询

PySpark读取CSV行数与Pandas不一致的问题解决

我尝试用不同框架将数据加载到DataFrame中,其中用PySpark加载一个包含14149行的CSV文件时,返回的行数是14153行,但用Pandas加载时是14149行。

使用的代码如下:

# Pandas 代码
import pandas as pd
df = pd.read_csv("data_file.csv")
print(df.shape)

# PySpark 代码
from pyspark.sql import SparkSession
spark = SparkSession \
  .builder \
  .appName("Task_1") \
  .getOrCreate()
df = spark.read.csv("data_file.csv")
print(df.toPandas().shape)

运行结果:

  • Pandas:(14149, 5)
  • PySpark:(14153, 5)

检查Spark DataFrame的头部和尾部数据都正常,但ID编号存在偏差,以下是可能的原因和解决方法:

可能的原因及解决办法

  • 换行符不一致:文件中可能存在混合换行符(如\r\n和\n共存),PySpark默认的换行符处理逻辑与Pandas不同,会将单独的\r识别为换行,生成额外空行。可以手动指定换行符:

    df = spark.read.option("lineSep", "\n").csv("data_file.csv")
    
  • 空白行未被过滤:文件中可能存在末尾或中间的空白行,Pandas默认会跳过这些行,但PySpark会将其读取为有效行。可以在读取时开启空白行过滤:

    df = spark.read.option("dropBlankLines", "true").csv("data_file.csv")
    

    或者读取后通过过滤条件移除空行(假设第一列为非空的ID列):

    df = df.filter(df._c0.isNotNull())
    
  • 引号包裹的多行内容解析错误:如果CSV中有被引号包裹的多行文本,PySpark可能未正确识别,导致将引号内的换行拆分成新行。需要明确指定引号和转义符参数:

    df = spark.read.option("quote", "\"").option("escape", "\"").csv("data_file.csv")
    
  • 表头处理差异:如果CSV文件包含表头,Pandas默认会将第一行识别为表头,而PySpark默认会将所有行视为数据,这会导致行数统计差异。若文件有表头,读取时需添加header=True参数:

    df = spark.read.option("header", "true").csv("data_file.csv")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 21:43:17