写点什么

练习 12-1

发布于: 2020 年 09 月 02 日
  • 分析如下 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);

Page_view 表和 user 表结构与数据示例如下:





答:

因为涉及到了2张表,所有map的输入会有两种格式,每次map时value还是只是一行数据,上面的HiveQL并没有把两张表的数据合并起来,因为数据量可能会很大,所以依次把两张表的数据都传给map处理。key表示当前读取数据的偏移,不需要关注。

value的两种形式:

  • 第一种 page_view的数据

如图所示,map的value数据是从page_view表中读取到的,map过后,输出的key是用户id,value分为2部分,第一部分是表示表的编号,1表示这条数据是从page_view表读取到的,第二部分是页面的id。



  • 第二种 user数据

如图所示,map的value数据是从user表中读取到的,map过后,输出的key是用户id,value分为2部分,第一部分是表示表的编号,2表示这条数据是从user表读取到的,第二部分是用户的年龄。



当2个表的数据都经过map处理过后,接下来就开始reduce了。

因为map产生了两种数据,所以首先需要对两种数据进行join操作,合并在一起。最后reduce输出key是pageid,value是user_age。从上面的HiveQL中可以看出,只是查询pv.pageid和u.age即可。



用户头像

还未添加个人签名 2018.11.15 加入

还未添加个人简介

评论

发布
暂无评论
练习 12-1