解析对RDD分区设置相关的API,包括repartition、coalesce。在解析过程中,通过解读源码,可以理解这两个API之间的关系。
RDD的分区个数对应了该RDD处理时的并行度,在实践过程中,可以通过修改一个RDD的分区数来优化性能。
一、coalesce
1.定义
2.功能描述
coalesce对RDD数据重新分区,如果是减少分区,直接设置新的分区数即可,如果增加分区个数,需要设置Shuffle为true,否则分区设置无效。
需要注意的是,即使是减少分区个数,如果设置了Shuffle为true,在重新分区过程中也会产生Shuffle过程。
3.示例
coalesce带两个参数,根据以下两种情况的组合,来分析该方法的作用。
1)numPartitions:分区数的增加/减少。
2)shuffle:重分区过程中是否进行shuffle操作。
4.示例解析
首先获取RDD的分区数,当前分区数为2,然后使用coalesce测试将分区数增加或减少后的分区个数,测试时,对shuffle参数也分别进行了设置。
需要注意的是,即使在减少分区数时,如果shuffle参数设置为true,对应的Lineage关系图中就会有ShuffledRDD,会存在Shuffle过程。
5.应用场景
1)大数据集加载并过滤,过滤后每个分区的数据量非常小,这时候可以使用该API,减少分区数,把小数据量的分区合并成一个分区。(www.xing528.com)
2)当将小数据量文件保存到外部存储系统时,可以通过将分区数重设为1,使得输出的数据在一个文件中,方便查看。
3)当分区数太低,导致CPU使用率过低时,可以借用该方法增加分区数,即增加处理的并行度,这时候可以提高CPU的使用率,继而提高性能。
二、repartition
1.定义
2.功能描述
也是对RDD数据重新分区,通过对源码的解析,可以看到它实际上是通过调用coalesce方法来实现的,但是在调用时,将shuffle的参数设置为true,因此,在调用repartition方法时,会产生shuffle过程。
说明:通过以上解析可知,如果重新分区不需要Shuffle即可完成的话,应该直接调用coalesce方法来实现。
3.repartition的源码
repartition方法其实就是coalesce(numPartitions,shuffle=true)方法的替换。
4.示例
5.示例解析
可以看到,使用repartition进行数据重新分区后得到的RDD都会有ShuffledRDD的父依赖。
6.应用场景
由上面的分析可知,repartition实际上是coalesce(numPartitions,shuffle=true)的缩写,因此,coalesce的应用场景也适用于该API。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。