Pyspark 的 sqlContext.read.csv() 函数读取的行数比实际 .csv 文件中的行数多

Posted

技术标签:

【中文标题】Pyspark 的 sqlContext.read.csv() 函数读取的行数比实际 .csv 文件中的行数多【英文标题】:Pyspark's sqlContext.read.csv() function is reading more lines than exists in actual .csv file 【发布时间】:2019-07-26 09:48:27 【问题描述】:

我有一个 CSV 文件。您可以从here 获取文件。该文件有 20050 行。某些列具有多行文本。如果我正在阅读此文件:

df = sqlContext.read.csv(FILE, header=True)

它显示了 24230 行。如果我将多行选项设置为 true,则会显示索引越界异常。

读取具有确切行数的 csv 文件的最佳方法是什么。如果我使用 pandas pd.read_csv() 阅读它,那么它显示的确实没有。的行。但我想在不使用熊猫的情况下阅读这个 CSV。谢谢。

欢迎任何可行的解决方案。

from pyspark import SparkContext
from pyspark.sql import SQLContext

FILE = "file:///home/shivam/gender-classifier-DFE-791531.csv"
sc = SparkContext.getOrCreate()
sqlContext = SQLContext(sc)

df = sqlContext.read.csv(FILE, header=True)

# Expected output 20050
# Actual Output 24230
print(df.count())

预期输出 = 20050

实际输出 = 24230

【问题讨论】:

如果你 csv.发布tail path/to/file的输出 【参考方案1】:

如果多行格式正确,请使用单义解析器。您最终会将整个 csv 读取到单个执行程序中,因此请确保您有足够的内存。

spark.read
  .option("parserLib", "univocity")
  .option("multiLine", "true")
  .csv(file.csv)

【讨论】:

感谢您的解决方案,但计数仍返回 20170 行而不是 20050 行。

以上是关于Pyspark 的 sqlContext.read.csv() 函数读取的行数比实际 .csv 文件中的行数多的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark 中的 JSON 文件解析

是否可以在 Pyspark 中对 DataFrame 进行子类化?

如何使用 Pyspark 和 Dataframes 查询 Elasticsearch 索引

使用 pySpark 读取分号数据的管道

调用地图后的pyspark EOFError

Pyspark:以表格格式显示火花数据框