spark groupbykey、join、cogroup算子的区别

  • 区别:
  • groupbykey:按key进行聚合,同一个RDD中进行聚合。理解为一个表中进行group by
  • cogroup:多个RDD进行group by(聚合)。理解为两张表中做group by
  • join;RDD之间的连接操作。相当于SQL中的join操作
  • cogroup与groupbykey的区别是groupbykey是一个RDD中做聚合(同一个表中),cogroup是不同RDD中做聚合(分组),理解为两个表中。

cogroup与join的区别

官网对join和cogroup解释

cogroup类似于SQL中的一个全连接两个RDD的记录都会返回,但是与连接的数据结构不一致,cogroup返回的是一个元组,但value是List的集合,如[key,(Iterable(V),Iterable(W))],注意到结果的两个迭代器,第一个迭代器装第一个RDD里面key相同的value,第二个迭代器装的是第二个RDD里面的key相同的value,元组中Value位置是各个RDD,同一个key对应value值的迭代器。join返回的也是元组,元组中value位置返回的是所有单值的集合,相当于对cogroup中迭代器去皮后的结果,将迭代器的值迭代出后的结果,类似于对cogroup中元组的value做了一个flatmap后的结果。

cogroup算子业务场景中很少遇到,他往往是其他很多算子的基础算子,作为一个中间结果呈现,如join算子的实现基础算子就是cogroup。

具体区别可参考下面两张图,一目了然。

猜你喜欢

转载自blog.csdn.net/godlovedaniel/article/details/114936888