7.5 MapReduce简单实例2:自然连接

一、任务描述

我们有两个表,雇员表和部门表。
雇员表:

Name Empld DeptName
Harry 3415 财务
Sally 2241 销售
George 3401 财务
Harriet 2202 销售

部门表:

DeptName Manager
财务 Gem
销售 Hans
生产 Charles

它们由公共字段DeptName,所以有自然连接条件。
具体做法是,以DeptName相等与否为依据,将雇员表的每一行依次和部门表匹配,每次匹配成功即输出一行结果。最终输出自然连接结果如下表

Name Empld DeptName Manager
Harry 3415 财务 Gem
Sally 2241 销售 Hans
George 3401 财务 George
Harriet 2202 销售 Hans

二、MapReduce实现

1. Split&RR

这里假设每个表为一个Split(可以拆更多)。然后做RR将关系表转为键值对:表名为key,其他字段组成的元组为value(注意多字段写入元组,所以还是value而非value list)。
雇员Split&RR结果

<"雇员表", (("Harry", 3415, "财务"), 
            ("Sally", 2241, "销售"), 
            ("George", 3401, "财务"), 
            ("Harriet", 2202, "销售"))>

部门Split&RR结果

<"部门表", (("财务", Gem), 
            ("销售", Hans), 
            ("生产", Charles))>

2. Map

将Split&RR结果输入Map函数。因为有两个Split所以有两个Map任务。Map的输出格式为键值对,逻辑为:公共字段DeptName为key,value为表名和其他部分组成的元组。
雇员Map结果

<"财务", ("雇员表", (Harry, 3415))>
<"销售", ("雇员表", (Sally, 2241))>
<"财务", ("雇员表", (George, 3401))>
<"销售", ("雇员表", (Harriet, 2202))>

部门Map结果

<"财务", ("部门表", (Gem))>
<"销售", ("部门表", (Hans))>
<"生产", ("部门表", (Charles))>

3. Shuffle

将各Map中,有相同key的归并到一起,输出<key, value-list>格式。
雇员Shuffle结果

<"财务", <("雇员表", (Harry, 3415)), ("雇员表", (George, 3401))>>
<"销售", <("雇员表", (Sally, 2241)), ("雇员表", (Harriet, 2202))>>

部门Shuffle结果

<"财务", <("部门表", (Gem))>>
<"销售", <("部门表", (Hans))>>
<"生产", <("部门表", (Charles))>>

4. Reduce

Reduce的逻辑是:输入中,key相同,但value list中表名项不同value的做连接(注意Reduce是不直接记录输入从哪个Map来的,而且原始表可以拆分到更多Map中);输出的key是新行号(比如这里假设要求以Empld升序排列),value就是把其他部分的元组和输入键合起来(注意表名只是用于判定,输出结果不需要)

<1, (Harriet, 2202, Hans, "销售")>
<2, (Sally, 2241, Hans, "销售")>
<3, (George, 3401, Gem, "财务")>
<4, (Harry, 3415, Gem, "财务")>

三、其他常见应用场景

关系代数运算(选择、投影、布尔、连接等)、矩阵运算、分组聚合运算等等。

四、执行方式

在Hadoop执行MapReduce任务的方式有很多。可以直接使用shell命令,也可以生成jar包,或者编写Python脚本;另外,Pig和Hive提供类SQL语句,框架可将其自动转换为MapReduce任务。用户可以酌情选择。

Reference:
https://www.icourse163.org/learn/XMU-1002335004#/learn/content?type=detail&id=1214310155&sm=1

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容