我正在使用PySpark读取一个输入文件,我想知道什么是对输入数据进行重新分区的最佳方法,以便它可以均匀地分布在Mesos集群中。在
目前,我正在做:
rdd = sc.textFile('filename').repartition(10)
我在看sparkContext
documentation,我注意到textFile
方法有一个名为minPartitions
的选项,默认设置为None
。在
我想知道如果我在那里指定我的分区值是否会更有效。例如:
^{pr2}$我假设/希望它能在数据被读入后消除对shuffle的需要,如果我一开始就分块读入文件。在
我听得对吗?如果没有,这两种方法(如果有的话)有什么区别?在
这些方法有两个主要区别:
repartition
在加载后洗牌数据,而使用minPartitions
则不会repartition
产生精确的分区数,而minPartitions
只提供了一个下限(请参见Why does partition parameter of SparkContext.textFile not take effect?)一般来说,如果使用
textFile
加载数据,则不需要进一步对其重新分区以获得大致均匀的分布。由于输入拆分是基于数据量来计算的,所以所有分区的大小都应该差不多相同。因此,进一步修改分区数量的唯一原因是提高内存或CPU内核等资源的利用率。在相关问题 更多 >
编程相关推荐