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
相关产品推荐
相关产品推荐

