我正在使用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的平均 countview 吗?
(我的想法是平均值为5/2,且为g1 g(2是另一个下标的总数:b1,b2))

最佳答案

因此,如果我了解您的要求,那么您正在寻找的答案可能类似于:



首先,您需要将问题分解为Map和Reduce阶段。目的是将 reducer 中每个“引导”的所有计数和banid分组。

映射器:

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

输出键可能是一个文本可写的,它将包含向导。值将包含banid和计数(即b1:1)。这会将所有banid和每个guid的计数分组。

reducer :

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

现在,您将获得Key中每个GUID的Text对象列表。遍历每个Value对象,拆分出banid和count。创建一组banid,并在迭代时对计数求和。完成此操作后,您应该能够计算平均值。将平均值写为FloatWritable(或Text ..取决于您)。键将与reduce的输入键相同。

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

关于hadoop - 使用Hadoop/Mapreduce计算平均值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11480321/

10-16 07:36