transformation 深度剖析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mn_kw/article/details/81977471

union算子

1. 新的rdd,会将就得俩个rdd的partition,原封不动的给挪过来

2. 新的rdd的partition的数量,就是旧的俩个rdd的partition的数量的总和

groupbyKey算子

一般来说,在执行shuffle类的算子的时候比如groupByKey,reduceBykey,join等

其实在算子内部都会创建几个RDD出来,那些隐士创建的RDD,主要是作为这个操作的一些中间数据的表达,以及作为stage划分的边界

因为有些隐士生成的rdd,可能是shuffledrdd,dependency就是shuffleDependency,会将rdd作为stage的第一个rdd划分出来

groupByKey等shuffle算子,都会创建一些隐士RDD,比如说这里,shuffleRDD,作为一个shuffle过程中的中间数据的代表,依赖这个shuffledRDD创建出来一个新的stage(stage1)shuffleRDD会去触发shuffle read操作,从上游stage的task所在节点,拉取过来相同的key进行进一步的聚合

对shuffledRDD中的数据执行一个map类的操作,主要是对每个partition中的数据,都进行一个映射和聚合,这里主要是将每个key对应的数据都聚合到一个iterator集合中

扫描二维码关注公众号,回复: 3246451 查看本文章

reduceByKey算子

内部原理和groupByKey 的异同之处,

1. 不同之处:reduceByKey,多了一个rdd,MapPartitionsRDD,存在于stage0的,主要代表了进行 本地数据归约之后的rdd,所以要网络传输的数据量,磁盘io会减少,性能更高

2. 相同之处:后面进行shuffle read和聚合的过程基本和groupByKey类似。都是ShuffleRDD,去做shuffle read.然后聚合,聚合后的数据就是最终的rdd.

distinct算子

1. 首先,自己先map给每个值打上一个v2,变成一个tuple,得到tupleRDD,然后对其进行reduceByKey,仅仅返回一个key,这时去重已经完成了,然后将值还原为单值

cogroup算子

其实在很多情况下,我们很少使用cogroup算子,但是cogroup算子是其他很多算子的基础,比如join

猜你喜欢

转载自blog.csdn.net/mn_kw/article/details/81977471
今日推荐