多表连接解题思路


思路:select emp.name,dept.name from emp join dept on emp.deptID = dept.ID
数据源


职员表 emp
name  deptID


张山    1
李斯    1
晓明    1
龙龙    2
呆呆    2 
姗姗    5




部门表 dept
ID    name
1     开发部
2     研发部
3     运营部
4     销售部
5     行政部




期望结果:
张山    开发部
李斯    开发部
晓明    开发部
龙龙    研发部
呆呆    研发部
姗姗    行政部


map执行过程:


以数字作为突破口
若该行记录以数字开头,则从行首开始处理,将数值部分作为key,非数字部分作为value ,分割点是空白
若该行记录以非数字开发,则从行尾开始处理,将数值部分作为key,非数字部分作为value。分隔点是空白


map任务结果:
1    1+张山    
1    1+李斯    
1    1+晓明    
2    1+龙龙    
2    1+呆呆    
5    1+姗姗
1    2+开发部
2    2+研发部
3    2+运营部
4    2+销售部
5    2+行政部 


洗牌结果:
(1,(1+张山,1+李斯,1+晓明,2+开发部 ))   
(2,(1+龙龙,1+呆呆,2+研发部))
(3,(2+运营部))
(4,(2+销售部))
(5,(1+姗姗,2+行政部))


reduce执行过程:
将value中含有1标示符的记录取出第二个元素加入A数组
得到A数组(张山,李斯,晓明)
将value中含有2标示符的记录取出第二个元素加入B数组
得到B数组(开发部)


对AB取 笛卡尔积
单一结果:
(张山,开发部)
(李斯,开发部)
(晓明,开发部)


其他reduce过程(略)
最终结果:
张山    开发部
李斯    开发部
晓明    开发部
龙龙    研发部
呆呆    研发部
姗姗    行政部











相关内容

    暂无相关文章