首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MapReduce设计

MapReduce设计
EN

Stack Overflow用户
提问于 2012-09-12 13:15:29
回答 3查看 131关注 0票数 0

数据中的每一行都采用以下格式:

UserId,性别,年龄

我们需要回答以下两个问题:

1)多少个男性和多少个女性。

2)有多少50岁以上和多少50岁以下。

有没有办法在一个Map Reduce作业中同时回答这两个问题?我知道我可以很容易地在两个不同的MR job中做到这一点,但我希望避免重复读取同一文件。我怎么能在一个MR工作中做到这一点呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-12 21:12:03

在映射阶段,您可以为每个记录输出2个键:

  • young/old
  • male/female

在reduce阶段使用count 1作为value和sum,这将给出您正在查找的4个值,或者输出包含组合信息的1个键:

  • youngmale/oldmale/youngfemale/oldfemale

在reduce阶段对count 1求和,得到4个组合值,您可以使用这些组合值通过添加计数对来获得所需的答案。

票数 1
EN

Stack Overflow用户

发布于 2012-09-12 13:47:31

假设映射器到缩减程序的输出类似于context.write(CONSTANT_KEY, VALUE);,其中键是一个常量,而值是一个连接的字符串"X,Y".X可以包含1个值{1,0},其中1代表男性,0代表女性。Y可以容纳1个值{1,0},其中1代表age>50,0代表age<50。现在在Reducer类中,您可以使用StringTokenizer类轻松地计算字段X&Y的1和0的数量。唯一的缺点是,由于键是恒定的,所以只有一个减法器。

票数 0
EN

Stack Overflow用户

发布于 2012-09-12 21:55:12

我想我已经回答了我自己的问题。下面的方法是可行的,对吧?

映射器:

代码语言:javascript
复制
if (Male)
  emit("Male", 1)
else
  emit("Female", 1)

if (Age > 50)
  emit("Over 50", 1)
else
  emit("Under 50", 1)

现在这四个不同的减速器有4个不同的键:“男性”,“女性”,“50岁以上”和“50岁以下”,这就是我的答案,对吧?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12381609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档