intersection,cogroup算子

intersection算子是得到多个RDD之间的交集的,下面来从源码上看一下具体处理。

intersection算子是交集,cogroup算子是并集,intersection不依赖k,v类型,cogroup依赖k,v类型

1. 把 多个RDD对应的数据map成(value,null)元组类型

2. 然后对map之后的RDD进行cogroup操作

(cogroup是协分组算子。他的作用是 把俩个RDD相同的数据分别放入compactBuffer中,然后把他们放到一个元组里面去,也就是 俩个RDD之间的相同数据分组到一起

把多个RDD中Key相同的数据搞到同一个分区的同一个组里面)

具体可以看下图。

 

 

这里有必要去看以下cogroup算子源码。

可以看到传入参数有俩个,一个是其他的RDD,一个是默认分区器也就是Hash分区器,分区器的分区数由RDD中最多的那个分区数决定。

可以看到对value进行了mapValue,将value映射成了俩个迭代器分别对应之前的RDD

 

 

 

3. 然后过滤掉俩个compactBuffer中为空的元组

4.取出最后Array中剩下元组的key,到这里就拿到多个RDD之间的交集了。

 

 

posted @ 2021-12-13 20:24  习惯了蓝  阅读(217)  评论(0)    收藏  举报