(Spark调优~)算子的合理选择

1.map与mappartition

1.map是对RDD中的每个元素作用上一个函数

2.mappartition是对每个分区作用上一个函数

如果遇到需要把数据写到数据库,一定要用mappartition

2.foreach 与foreachpartition

类似于map与mappartition
区别是:foreach是行动算子,map是转换算子

3.groupByKey与reduceByKey

1.groupByKey

所有数据都经过了shuffle。

2.reduceByKey

会先在map端做一个本地的聚合,然后聚合的数据进行shuffle操作(map端预聚合)
(优先采用这种方法)
在这里插入图片描述

4.collect算子

执行结果的数据全部梵高一个数组里(会导致OOM)慎用!

5.coalesce与repartition

两者的作用都是使分区数发生改变

1.coalesce算子

使分区数减少时不会有shuffle,(data.coalesce(1))
使分区数超过默认值时,会有shuffle

一般使用在多分区变少分区

2.repartition算子

repartition算子底层调用coalesce(shuffle = true),会有shuffle

猜你喜欢

转载自blog.csdn.net/weixin_48929324/article/details/115607344
今日推荐