单表连接解题思路


整体思路:select a.child,b.parent from table1 a join table1 b  on a.parent = b.child(类似于自连接)


数据源:               
child    parent


tom      lucy
lucy     alice
alice    jack
lucy     kate


期望结果:
grandChild  grandParent
tom          alice
tom          kate
lucy         jack
 
map任务执行结果:
//构建表1                 //构建表2
lucy,1+tom+lucy           tom,2+tom+lucy 
alice,1+lucy+alice        lucy,2+lucy+alice
jack,1+alice+jack         alice,2+alice+jack
kate,1+lucy+kate          lucy,2+lucy+kate


//shuffer 结果:
(lucy,(1+tom+lucy,2+lucy+alice,2+lucy+kate))
(alice,(1+lucy+alice,2+alice+jake))
(jack,(1+alice+jack))
(kate,(1+lucy+kate))
(tom,(2+tom+lucy ))


//reduce过程
(以lucy为key的reduce任务)
构建A数组过程:
将values中含“1”的value取第二个元素加入数组A
A数组构建结果:A(tom)                                
构建B数组过程:
将values中含“2”的value取第三个元素加入数组B
B数组构建结果:B(alice,kate)


得到单个结果(tom,alice)(tom,kate)


(以alice为key的reduce任务)
构建A数组过程:
将values中含“1”的value取第二个元素加入数组A
A数组构建结果:A(lucy)                                
构建B数组过程:
将values中含“2”的value取第三个元素加入数组B
B数组构建结果:B(jack)


得到单个结果(lucy,jake)


最终总结果:
grandChild  grandParent
tom          alice
tom          kate
lucy         jack









相关内容