我正在使用PySpark读取输入文件,我想知道什么是重新分区输入数据的最佳方法,因此它可以在Mesos群集中均匀分布。
目前,我正在做:
rdd = sc.textFile('filename').repartition(10)
我正在查看sparkContext
documentation,我注意到textFile
方法有一个名为minPartitions
的选项,默认设置为None
。
如果我在那里指定分区值,我想知道它是否会更有效率。例如:
rdd = sc.textFile('filename', 10)
我假设/希望它在数据被读入后消除了随机播放的需要,如果我以块开头读入文件。
我理解正确吗?如果没有,两种方法(如果有的话)有什么区别?
答案 0 :(得分:1)
这些方法有两个主要区别:
repartition
在加载后使用minPartitions
不repartition
会产生确切的分区数,而minPartitions
仅提供下限(请参阅Why does partition parameter of SparkContext.textFile not take effect?)通常,如果使用textFile
加载数据,则无需进一步重新分区以获得大致均匀的分布。由于输入分割是基于数据量计算的,因此所有分区应该已经或多或少具有相同的大小。因此,进一步修改分区数量的唯一原因是提高内存或CPU内核等资源的利用率。