单表连接解题思路
单表连接解题思路
整体思路: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
评论暂时关闭