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

回到顶部