Использование итераторов и объединителей Accumulo для агрегирования значений из нескольких строк
Я хотел знать, возможно ли выполнять операции агрегации для значений, хранящихся в нескольких строках. Например, у меня есть следующая таблица
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 - это одно и то же, но разная временная метка) одного и того же ключа вместо агрегирования для отдельных ключей.
2 ответа
Комбинаторы (и их предшественники, агрегаторы) выполняют агрегацию для одного и того же ключа. Вы можете создать итератор, который преобразует несколько ключей в один ключ, но вам все равно придется объединяться в клиенте, потому что для каждого планшета будет производиться куча частичных вычислений.
Вы можете использовать "наблюдателей" Apache Fluo, чтобы собирать статистику, пока вы принимаете данные за столом.
Там, вероятно, несколько решений. Я бы посоветовал взглянуть на Apache Fluo, и если вы действительно не хотите его использовать, рассмотрите возможность агрегирования частичных сумм / подсчетов в качестве итератора в каждой таблетке и окончательного агрегирования на стороне клиента.
Позвольте мне предвосхитить это тем фактом, что я не использовал Accumulo годами, но я не уверен, что вы сможете сделать это полностью на стороне сервера. Причина в том, что вы ищете значения в CQ, которые будут распределены среди всех узлов кластера Accumulo. Т.е. планшетный сервер, который знает о 00000:0000, не (гарантированно) ничего не знает о значениях для 00002:0000 и т. Д. Вам, вероятно, придется выполнить вторую индексацию ваших данных, чтобы обеспечить эту функциональность (т.е. делая CQ RowID), или вам придется выполнять агрегацию на стороне клиента. Возможно, вам удастся использовать гибридный подход, заключающийся в том, чтобы использовать агг на планшет и оставшуюся агг на стороне клиента.