练习 12-1
分析如下 HiveQL,生成的 MapReduce 执行程序,map 函数输入是什么?输出是什么,reduce 函数输入是什么?输出是什么?
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即可。
评论