如何为这个场景编写mapreduce

  • 本文关键字:mapreduce hadoop mapreduce
  • 更新时间 :
  • 英文 :


这是数据集

用户Id,类别Id,日期

A,123, 2016-01-01
B,123, 2016-01-01
C,123, 2016-01-01
C,123, 2016-01-01
D,123, 2016-01-01
2016-01-01 E, 123,

需要如下输出:

日期,类别Id,观看次数,用户数

2016-01-01, 123, 1,3
2016-01-01, 1,2,2

<标题>解释:

根据数据集,有3个用户(B, D, E)只查看了一次类别。
有2个用户(A, C)浏览了该类别2次。

这个场景的hive查询是:

select numberOfUsers, category, impression_date, count(numberOfUsers) as countOfUsers from (select count(user_id) as numberOfUsers, category, impression_date from userVisit按类别(user_id, impression_date)进行分组按用户数量、类别、印象日期分组sort by countOfUsers;

这个场景的Mapreduce代码是什么?

由于您使用的是嵌套查询,因此您可能必须在数据集上运行两次MapReduce (chain)才能获得所需的结果。

我建议采用以下方法。

步骤1。读取文本并将整行文本作为键并执行单词计数(可以更好地说为行计数,因为整行是键)

图1输出-
键~值
中国机械工程,2016,2016-01-01 ~ 1
中国机械工程,2016,2016-01-01 ~ 1
中华人民大学学报(自然科学版),2016-01-01 ~ 1
中国机械工程,2013,2016-01-01 ~ 1
中国机械工程,2013,2016-01-01 ~ 1
D,123,2016-01-01 ~ 1
机电工程,2016,2016-01-01 ~ 1

减少1个输出-
键~值
中国机械工程,2016,2016-01-01 ~ 2
中华人民大学学报(自然科学版),2016-01-01 ~ 1
中国机械工程,2016,2016-01-01 ~ 2
D,123,2016-01-01 ~ 1
中国机械工程,2016-01-01 ~ 1



步骤2。现在将此输出作为下一个MapReduce的输入,并对这一行执行单词计数。当然,您必须根据需要的输出重新排列和修改输入键。
-读取前面输出的键和值作为记录
-将此记录重新排列为"A,2016-01-01 1,123 2"
-删除第一个字符和',',并使用记录的其余部分作为字(行)计数的关键字

Map 2输出——

键~值
2016-01-01 . 123 2 ~ 1
2016-01-01 . 123 1 ~ 1
2016-01-01 . 123 2 ~ 1
2016-01-01 . 123 1 ~ 1
2016-01-01 . 123 1 ~ 1

减少2输出——

键~值
2016-01-01 . 123 1 ~3
2016-01-01 2 ~2

相关内容

  • 没有找到相关文章

最新更新