MapReduce 之 单表关联 设计思路与源码分析

本文通过一个简单的样例child-parent 表来介绍单表关联,在介绍这部分内容的时候主要包括两部分:1、描述清楚每一部分设计的思路;2、基于Mapreduce 进行了实现。

1. 样例child-parent表的内容和期望的输出

我们得到一个child-parent 表,然后希望能够通过挖掘到两列之间的关系,得到一个新的表 grandchild-grandparent 。

为了方便说明问题,首先给出一个简单的家庭人物关系图。

这里写图片描述

我们已知的表是表示孩子 和父母之间的对应关系,然后求出孩子和爷爷奶奶(姥姥姥爷)的对应关系。因此我们的输入如下图所示。

输入:

这里写图片描述

这里输入包括两列,第一列为child列,第二列为parent列。
然后我们通过连接的方式找到孩子父母的父母。所以它的输出结果如下:

这里写图片描述

2. 设计思路

现在对这个实例进行分析,已知给出child-parent 表,要想得到grandchild-grandparent表,那么就需要进行单表连接。即对左表的child列 和 右表的parent 列进行连接,且左表 和 右表 是同一个表。

2.1 Map过程的设计

  • 对读入的一行文本进行解析,得到两部分内容: child 和parent 。
  • 因为要实现单表关联,实际上就是两张表的连接,那我们希望Map过程的输出是两张表的内容,因此Map的输出应该是两类:
    • 第一类输出的< key,value>中child作为key,parent 作为value
    • 第二类输出的< key,value>要把parent 作为key ,child 作为value。
    • 这样在map过程处理完所有行之后,它的输出既输出了左表child-parent,又输出了右表parent-child。
    • 另外 ,还要对这两类进行区别,比如第一类的输出的value里加入”@”,第二类输出的value里加入’&’。

经过Map过程之后,会得到如下结果:

这里写图片描述

Map结果输出之后,MapReduce框架自动实现Shuffle 过程,结果如下:

这里写图片描述

从Shuffle结果可以看出,输出的key为家庭各个成员,输出的value 为每个成员的父母或者子女,并且可以通过字符@或者&进行区分。
那么我们可以得出,若一个成员的value列表中仅含有父母或者仅含有子女,则

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值