2

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

引导禁止计数视图

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 与 guid g1 (2 是总数另一个banid:b1,b2))

4

1 回答 1

2

所以如果我明白你在问什么,你正在寻找的答案可能看起来像:

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

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

首先,您需要将问题分解为 Map 和 Reduce 阶段。目标是对减速器中每个“guid”的所有计数和禁止项进行分组。

映射器:

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

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

减速器:

输出键/值类型:Text / FloatWritable

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

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

于 2012-07-14T03:14:23.317 回答