数据中的每一行都采用以下格式:
UserId,性别,年龄
我们需要回答以下两个问题:
1)多少个男性和多少个女性。
2)有多少50岁以上和多少50岁以下。
有没有办法在一个Map Reduce作业中同时回答这两个问题?我知道我可以很容易地在两个不同的MR job中做到这一点,但我希望避免重复读取同一文件。我怎么能在一个MR工作中做到这一点呢?
发布于 2012-09-12 21:12:03
在映射阶段,您可以为每个记录输出2个键:
在reduce阶段使用count 1作为value和sum,这将给出您正在查找的4个值,或者输出包含组合信息的1个键:
在reduce阶段对count 1求和,得到4个组合值,您可以使用这些组合值通过添加计数对来获得所需的答案。
发布于 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的数量。唯一的缺点是,由于键是恒定的,所以只有一个减法器。
发布于 2012-09-12 21:55:12
我想我已经回答了我自己的问题。下面的方法是可行的,对吧?
映射器:
if (Male)
emit("Male", 1)
else
emit("Female", 1)
if (Age > 50)
emit("Over 50", 1)
else
emit("Under 50", 1)现在这四个不同的减速器有4个不同的键:“男性”,“女性”,“50岁以上”和“50岁以下”,这就是我的答案,对吧?
https://stackoverflow.com/questions/12381609
复制相似问题