使用Hadoop / Mapreduce计算数字的平均值

时间:2012-07-14 01:37:57

标签: hadoop numbers mapreduce average

我使用Hadoop / Mapreduce计算数字的平均值 结构

guid banid countview

g1 b1 1

g1 b2 1

g1 b1 2

g1 b1 1

g2 b1 1

g2 b2 1

g2 b1 1

g2 b3 1

g3 b1 1

我想要guid的每个banid的平均值 countview ? (我的头脑是平均= 5/2与guid g1(2是总数另一个banid:b1,b2))

1 个答案:

答案 0 :(得分:2)

因此,如果我理解您的要求,您正在寻找的答案可能如下:

  

g1 b1 1
  g1 b2 1
  g1 b1 2
  g1 b1 1

  " g1"的平均值= 5/2(总计数/独特的banid计数)

首先,您需要将问题分解为Map和Reduce阶段。目的是将每个" guid"的所有计数和禁令分组。在减速机中。

<强>映射器:

输出键/值类型:文本/文本

输出键可能是包含guid的Text Writable。该值将包含banid和count(即b1:1)。这将对每个guid的所有banid和计数进行分组。

<强>减速机:

输出键/值类型:Text / FloatWritable

现在,您将获得Key中每个guid的Text对象列表。遍历每个Value对象,将banid和count分开。创建一组banids并在迭代时对计数求和。一旦你完成了这个,你应该能够计算出平均值。将平均值写为FloatWritable(或Text ..由您决定)。 Key将与reduce的输入键相同。

这是处理需要包含多条信息的值的简单方法。更高级的方法是创建自己的Writable对象来包装Text和VIntWritable对象。