我正在尝试使用 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/