架构师训练营第十二周命题作业
分析如下 HiveQL,生成的 MapReduce 执行程序,map 函数输入是什么?输出是什么,reduce 函数输入是什么?输出是什么?
INSERT OVERWRITE TABLE pv_users
SELECT pv.pageid, u.age
FROM page_view pv
JOIN user u
ON (pv.userid = u.userid);
Map
输入:就是两个表中一行一行的数据,两个 map 操作,分别处理两个表中的数据,分别得到两个输出
输出:
page_view 的 map 操作,得到的输出是,以 userid 为 key,userid 为 value 的对应关系
user 的 map 操作,得到的输出是,以 userid 为 key,age 为 value 的对应关系
为了将两个表的数据关联起来,所以要选择两个表的共有字段作为两个 map 操作的输出结果的 key,也就是题目中 SQL 语句中 ON 操作所用的字段 userid
由于两个 map 操作的结果中,都是以 userid 作为 key,那怎么讲两个 map 操作的 value 对应起来呢?怎么知道哪个 value 结果是哪个表产生的?这就需要在两个 map 的操作结果里,在 value 中多加一个信息,就是表的唯一标识(比如表名)。结果,
page_view 的 map 结果就是:
111 -> <1, 1>
111 -> <1, 2>
222 -> <1, 1>
user 的 map 结果就是:
111 -> <2, 25>
222 -> <2, 32>
Reduce
输入:就是上面两个 map 的输出结果
输出:
1->25
2->25
1->32
版权声明: 本文为 InfoQ 作者【一马行千里】的原创文章。
原文链接:【http://xie.infoq.cn/article/6413ed5e1935e1778a7d9bb4f】。文章转载请联系作者。
评论