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 中对 DataFrame 进行子类化?