spark transform系列__join

这篇博客详细介绍了Spark中的Join操作,包括join、fullOuterJoin、leftOuterJoin和rightOuterJoin四种类型。通过源代码分析,解释了它们的实现流程和差异。Join操作基于cogroup函数,而leftOuterJoin和rightOuterJoin分别以左和右RDD为基准保留所有数据,fullOuterJoin则是两者的组合,确保所有数据都被包含。
摘要由CSDN通过智能技术生成

Join

Join包含有join,fullOuterJoin,leftOuterJoin,rightOuterJoin四种实现,

下面先根据join的实现流程进行分析,再对join分析的结果的基础上,最后根据后面三种join的实现,说明下这几种JOIN的差别所在.

Join的函数中,需要一个Partitioner的实例,默认是HashPartitioner,join的实现中,是直接通过调用 的cogroup函数来进行的实现,因此,要分析join的流程时,我们需要先去了解下cogroup的流程实现;

 

Join函数,

在进行join操作时,需要先定义W的类型(要合并的另一个RDD的value的类型)

def join[W](other: RDD[(KW)]partitioner: Partitioner): RDD[(K(VW))] = self.withScope {
  this.cogroup(otherpartitioner).flatMapValues( pair =>
    for (v <- pair._1.iteratorw <- pair._2.iterator) yield (vw)
  )
}

 

在join操作的函数中,首先是先执行了cogroup的操作,这个操作把两个RDD中相同的key对应的value集合生成为一个Pair.

接下来,通过flatMapValues操作,对相同的key的value部分进行迭代,其实一个key在flatMapValues时只包含一个value.针对这个value执行下面这个for的迭代.

for (v <- pair._1.iteratorw <- pair._2.iterator) yield (vw)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值