Spark算子调优
Spark中可用下面的算子对数据计算进行优化处理,包括:
- mapPartition:一次处理一个分区数据,能够使用mapPartition的尽量使用,但是使用时会一次性读取整个分区数据到内存,占内存很大,同理还有foreachRDD、foreachPartition(例如写入数据库使用,不用每条打开关闭连接)。
- coalesce:当分区由多变少建议不使用Shuffle而使用coalesce,如果很多变很少可以开启Shuffle;如果少变多必须开启Shuffle,否则分区不会执行。filter尽量和coalesce结合使用,降低数据倾斜。如果使用SparkSQL读取数据,因为初始分区数无法参考spark.default.parallelism则读取后最好进行重分区(repartition),防止数据倾斜或资源分配不均。
- reduceByKey:尽量使用reduceByKey,而不要使用groupByKey,除非必须使用,例如均值计算,因为前者会本地聚合。