使用Accumulo的迭代器和组合器来聚合多行的值

时间:2017-04-20 09:34:04

标签: mapreduce accumulo

我想知道是否可以对存储在多行中的值执行聚合操作。例如,我有下表

import urllib
import os
urllib.request.urlretrieve(link, os.path.join(my_folder, "file.pdf"))

我想要做的是找到使用columnQualifier A存储的所有值的平均值。是否可以使用Accumulo的迭代器,过滤器或组合器?

我看到了StatsCombiner,但该组合器对同一个密钥执行不同版本(rowID,colFam和colQual相同但时间戳不同)的聚合,而不是对不同的密钥本身执行聚合。

2 个答案:

答案 0 :(得分:1)

组合器(及其前身,聚合器)对相同的密钥进行聚合。您可以创建一个迭代器,将多个键转换为单个键,但您仍需要在客户端进行聚合,因为您将为每个平板电脑生成一系列部分计算。

您可以使用Apache Fluo的“观察员”在您摄取表格时保持汇总统计数据。

可能有多种解决方案。我建议看看Apache Fluo,如果你真的不想使用它,那么考虑将部分总和/计数聚合为每个平板电脑中的迭代器,并在客户端进行最终聚合。

答案 1 :(得分:0)

让我先说明我多年来没有使用过Accumulo的事实,但我不确定你是否能在服务器端完全做到这一点。原因在于,您正在寻找将要分散的CQ中的值,这将是Accumulo集群的所有节点。即知道00000:0000的平板电脑服务器(保证)不知道有关00002:0000等值的任何信息。您可能要么需要对数据进行第二次索引以提供此功能功能(即使CQ成为RowID),或者您必须在客户端进行灌溉。您可能能够采用混合方法为每个平板电脑做一些聚合并在客户端进行剩余的聚合。