您的位置:首页 > 其它

多表连接解题思路

2014-03-23 21:47 155 查看
思路: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过程(略)

最终结果:

张山 开发部

李斯 开发部

晓明 开发部

龙龙 研发部

呆呆 研发部

姗姗 行政部
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: