7.5 MapReduce簡單實例2:自然連接

一、任務描述

我們有兩個表,雇員表和部門表。
雇員表:

Name Empld DeptName
Harry 3415 財務
Sally 2241 銷售
George 3401 財務
Harriet 2202 銷售

部門表:

DeptName Manager
財務 Gem
銷售 Hans
生產(chǎn) Charles

它們由公共字段DeptName,所以有自然連接條件。
具體做法是,以DeptName相等與否為依據(jù),將雇員表的每一行依次和部門表匹配,每次匹配成功即輸出一行結(jié)果。最終輸出自然連接結(jié)果如下表

Name Empld DeptName Manager
Harry 3415 財務 Gem
Sally 2241 銷售 Hans
George 3401 財務 George
Harriet 2202 銷售 Hans

二、MapReduce實現(xiàn)

1. Split&RR

這里假設(shè)每個表為一個Split(可以拆更多)。然后做RR將關(guān)系表轉(zhuǎn)為鍵值對:表名為key,其他字段組成的元組為value(注意多字段寫入元組,所以還是value而非value list)。
雇員Split&RR結(jié)果

<"雇員表", (("Harry", 3415, "財務"), 
            ("Sally", 2241, "銷售"), 
            ("George", 3401, "財務"), 
            ("Harriet", 2202, "銷售"))>

部門Split&RR結(jié)果

<"部門表", (("財務", Gem), 
            ("銷售", Hans), 
            ("生產(chǎn)", Charles))>

2. Map

將Split&RR結(jié)果輸入Map函數(shù)。因為有兩個Split所以有兩個Map任務。Map的輸出格式為鍵值對,邏輯為:公共字段DeptName為key,value為表名和其他部分組成的元組。
雇員Map結(jié)果

<"財務", ("雇員表", (Harry, 3415))>
<"銷售", ("雇員表", (Sally, 2241))>
<"財務", ("雇員表", (George, 3401))>
<"銷售", ("雇員表", (Harriet, 2202))>

部門Map結(jié)果

<"財務", ("部門表", (Gem))>
<"銷售", ("部門表", (Hans))>
<"生產(chǎn)", ("部門表", (Charles))>

3. Shuffle

將各Map中,有相同key的歸并到一起,輸出<key, value-list>格式。
雇員Shuffle結(jié)果

<"財務", <("雇員表", (Harry, 3415)), ("雇員表", (George, 3401))>>
<"銷售", <("雇員表", (Sally, 2241)), ("雇員表", (Harriet, 2202))>>

部門Shuffle結(jié)果

<"財務", <("部門表", (Gem))>>
<"銷售", <("部門表", (Hans))>>
<"生產(chǎn)", <("部門表", (Charles))>>

4. Reduce

Reduce的邏輯是:輸入中,key相同,但value list中表名項不同value的做連接(注意Reduce是不直接記錄輸入從哪個Map來的,而且原始表可以拆分到更多Map中);輸出的key是新行號(比如這里假設(shè)要求以Empld升序排列),value就是把其他部分的元組和輸入鍵合起來(注意表名只是用于判定,輸出結(jié)果不需要)

<1, (Harriet, 2202, Hans, "銷售")>
<2, (Sally, 2241, Hans, "銷售")>
<3, (George, 3401, Gem, "財務")>
<4, (Harry, 3415, Gem, "財務")>

三、其他常見應用場景

關(guān)系代數(shù)運算(選擇、投影、布爾、連接等)、矩陣運算、分組聚合運算等等。

四、執(zhí)行方式

在Hadoop執(zhí)行MapReduce任務的方式有很多??梢灾苯邮褂胹hell命令,也可以生成jar包,或者編寫Python腳本;另外,Pig和Hive提供類SQL語句,框架可將其自動轉(zhuǎn)換為MapReduce任務。用戶可以酌情選擇。

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容