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

Using Accumulo's iterators and combiners to aggregate values from multiple rows

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

rowID   colFam   colQual   value
00000   0000     A         12
00000   0001     B         Test
00001   0000     A         35
00001   0001     B         Foo
00002   0000     A         7
00002   0001     B         Bar

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

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

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

组合器(及其前身聚合器)对同一个键进行聚合。您可以创建一个将多个键转换为单个键的迭代器,但您仍然必须在客户端中进行聚合,因为您将为每个 tablet.[=11 生成一堆部分计算=]

您可以使用 Apache Fluo 的 "observers" 来汇总您的统计数据,同时摄取到您的 table。

可能有多种解决方案。我建议看一下 Apache Fluo,如果您真的不想使用它,那么可以考虑将部分 sums/counts 聚合为每个 tablet 中的迭代器,并在客户端。