我正在使用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/