MapReduce的设计
数据中的每个线有以下格式:MapReduce的设计
用户ID,性别,年龄
我们需要回答以下两个问题:
1)有多少男性&多少女性。
2)50多年多少年& 50岁以下的人数。
有没有办法在单个Map Reduce作业中回答这两个问题?我知道我可以在两个单独的MR作业中轻松完成此操作,但是希望避免两次读取同一个文件。我只能在一个MR工作中如何做到这一点?
回答:
在地图阶段您可以对每条记录输出2个键:
- 年轻/老
- 男/女
与数1作为减少相位值和总和这将给你你正在寻找的4个值,或者输出1个组合信息的关键:
- youn gmale/oldmale/youngfemale/oldfemale
计数1在缩小阶段加起来,给你4个组合值,你可以通过添加计数对来得到你想要的答案。
回答:
假设你的映射器的输出到减速机就像是context.write(CONSTANT_KEY, VALUE);
其中,key是一个常数,而值是一个连接字符串"X,Y"
。 X
可以保持1值{1,0},其中1代表男性& 0代表女性。 Y
可以保持1值{1,0},其中1代表年龄> 50 & 0代表年龄< 50.现在在Reducer类中,可以很容易地计算字段X的1和0的数量& Y使用StringTokenizer类。唯一的缺点是,因为KEY是恒定的,所以只有一个reducer。
回答:
我想我回答了我自己的问题。以下是可行的,对吧?
映射:
if (Male) emit("Male", 1)
else
emit("Female", 1)
if (Age > 50)
emit("Over 50", 1)
else
emit("Under 50", 1)
现在这些将前往4轮不同的减速机有4个不同的密钥: “男”, “女”, “超过50个” & “在50”,还有我的回答,对吧?
以上是 MapReduce的设计 的全部内容, 来源链接: utcz.com/qa/262301.html