csv - Spark 2.0读取csv分区数量(PySpark)

标签 csv apache-spark pyspark

我正在尝试使用 Spark 2.0 中的新内容将一些代码从 Spark 1.6 移植到 Spark 2.0。首先,我想使用 Spark 2.0 中的 csv 阅读器。顺便说一句,我正在使用 pyspark。

使用“旧”textFile 函数,我可以设置最小分区数。例如:

file= sc.textFile('/home/xpto/text.csv', minPartitions=10)
header = file.first() #extract header
data = file.filter(lambda x:x !=header) #csv without header
...

现在,使用 Spark 2.0,我可以直接读取 csv:

df = spark.read.csv('/home/xpto/text.csv', header=True)
...

但我没有找到设置 minPartitions 的方法。

我需要它来测试我的代码的性能。

谢谢, 弗雷德

最佳答案

简短的回答是否定的:如果使用 DataFrameReader,则无法使用类似于 minPartitions 参数的机制来设置最小栏。

coalesce在这种情况下可以使用来减少分区数量,并且 repartition可用于增加分区计数。当您使用coalesce时,如果通过提供 shuffle 参数强制进行 shuffle(尤其是在数据倾斜的情况下),下游性能可能会更好: coalesce(100,shuffle=True) 。这会触发数据完全洗牌,其成本影响类似于 repartition .

请注意,上述操作通常不会保持文件读取的原始顺序(除非在不带 shuffle 参数的情况下运行 coalesce),因此如果您的代码的一部分取决于数据集的顺序,您应该避免在此之前进行洗牌。

关于csv - Spark 2.0读取csv分区数量(PySpark),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38128233/

相关文章:

arrays - 跳过数组中的一行,Perl

python - Pandas :如何解决 "error tokenizing data"?

apache-spark - Delta Lake 回滚

python - Pandas 到 PySpark : transforming a column of lists of tuples to separate columns for each tuple item

javascript - .csv 绑定(bind)到 d3.js 麻烦

python csv header

java - 为什么我的自定义函数的调用方法中的 println 语句没有出现在日志中?

hadoop - 在Spark上处理大文件的方法

python - 在 pyspark 中将多标签列转换为多列?

python - 将字符串列转换为向量列 Spark DataFrames