1、使用mapPartitions或者mapPartitionWithIndex取代map操作
mapPartitions与map函数类似,只不过映射函数的参数由RDD的每个元素变成了RDD的每个分区的迭代器。如果在映射过程中需要频繁创建额外的对象,使用mapPartitions要比map函数高效。
mapPartitionWithIndex与mapPartitions基本相同,只是处理函数的参数是两个,第一个是当前处理的分区的index,第二个是当前处理的分区元素组成的iterator。
2、使用foreachPartition把spark数据持久化到外部存储介质
3、使用coalesce取代rePartition操作
repartition方法就是coalesce方法shuffle为True的情况,如果只是要减少父RDD的分区数量,并且要设置的分区数量变化不是很激烈的,则可以考虑直接使用coalesce方法来避免执行shuffle操作,以提高效率。
4、使用treeReduce取代reduce
treeReduce与treeAggregate类似,利用在Executor端进行多次Aggregate来缩小Driver的计算开销。