一、什么是宽依赖,什么是窄依赖,哪些算子是宽依赖,哪些是窄依赖
1、宽依赖:一个分区对应多个分区,这就表明有shuffle过程,父分区数据经过shuffle过程的hash分区器划分子rdd。
例如:groupbykey reducebykey sortbykey等操作,shuffle可以理解为数据从原分区打乱重组到新分区
2、窄依赖:一个分区对应一个分区,这个过程没有shuffle过程
例如 map filter等
spark的stage就是按照shuffle来划分的
二、transformation和action算子有什么区别,举例说明
1、transformation 变换、转换算子,这种变化并不会触发提交作业,完成作业过程处理,transformation操作是延迟计算的。
也就是说从rdd到另一个rdd的转换并不会马上执行,需要遇到action操作才会触发计算
2、action行动算子,这类算子会真正的触发spark 提交job作业
三、哪些spark算子会shuffle
1、去重distanct
2、groupbykey reducebykey
3、重分区 repartition coalesce
4、join算子【分情况讨论】
两个RDD的分区数相同,在join的时候设置的分区数也相同,则在join阶段不会产生shuffle
两个RDD的分区数不同,在join的时候设置的分区数不同,则在join阶段都会产生shuffle
两个RDD的分区数不同,在join的时候设置的分区数和其中一个相同,则在join阶段不