十二、数据应用 (一)
分析如下 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 表结构与数据示例如下
page_view
pageid userid time
1 111 9:08:01
2 111 9:08:13
1 222 9:08:14
user
userid age gender
111 25 female
222 32 male
执行过程如下图所示
因为两张表要通过 userid 字段将对应的 pageid 和 age 字段进行合并,可以确定 map 输出的 key 一定是 userid, 只有 userid 作为 key,才能够把两张表的数据交给一个 reduce 进行关联处理。
map 输入, 两张表的每行记录。
map 输出, 两张表 map 输出 key 都是 userid, 只是 value 值不同, 第一张表 value 要包含表名和 pageid 字段, 第二张表 value 要包含表名和 age 字段。
reduce 输入, map 的输出数据经过 shuffle sort 处理, 将相同的 key 交给一个 reduce 进行关联处理。
reduce 输出, 相同的 key 有了 2 张表的数据, 那么可以进行组合输出 pageid 字段和 age 字段即可完成两张表的 join 操作。
评论