我正在使用具有结构的 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))
所以如果我明白你在问什么,你正在寻找的答案可能看起来像:
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 对象。