Spark调优-选择合适的分区

昨天在利用 Spark 进行统计分析的时候大佬提醒我可以适当的减少分区数量来加快作业的执行速度。于是今天测试了一下,利用sc.textFile("xxx")读取数据,采用默认分区(6657个)时执行时间为 190 秒。当手动使用 coalesce 进行重新分至 120 个分区时执行时间减少到 112 秒。当然这里的 120 并不是随便设置的,而是正好等于作业时候的并行度。

原因

我们知道分区的个数是等于 task 的个数的。如果分区数量远大于并行度,那么就会造成大量的时间浪费在 task 的切换中。而如果分区数量小于并行度,那么就会存在一些核心无法分配到需要的数据而闲置,造成资源浪费。因此在设置分区的时候尽量等于并行度。

方法

可以使用 coalesce 和 repartition 可以对 RDD 重新设置分区的个数。具体区别会在Spark源码阅读计划中讲解。