1、mapPartitions代替map:map的输入变换函数应用于RDD中的每个元素,mapPartitions的输入函数应用每个分区。
eg:RDD的数据(10个元素,3个分区)通过JDBC连接写入数据库,map要做10次jdbc连接,mapPartitions只要三次
2、repartition=coalesce(true)
3、RDD使用filter如果partition数比较多,某些情况再使用coalesce减少分区数可以提高性能,因为partition比较多的情况每个task处理partition中的数据量比较少,造成资源浪费,coalesce后partition数减少,减少了处理的task,节省了时间
4、如果repartition重分区后还要排序,使用repartitionAndSortWithinPartitions,该算子可以一边进行重分区的shuffle操作,一边进行排序
5、treeReduce代替reduce:用于单个reduce操作开销比较大的情况,treeReduce可以通过调整深度来控制每次reduce的规模
6、AggregateBykey代替groupByKey
7、cache=persist(MEMORY_ONLY)