Получить среднее значение для каждых N кортежей в Apache Pig

Предположим, у меня есть таблица с двумя столбцами CUSTTYPE и AMOUNT. Я хочу добавить третий столбец NTILE, который затем можно сгруппировать и использовать для получения средних значений, как показано ниже:

CUSTTYPE | AMOUNT  | NTILE
----------+---------+----------
 RETAIL   |   78.00 |   1
 RETAIL   |  234.00 |   1
 RETAIL   |  249.00 |   1
 RETAIL   |  278.00 |   2
 RETAIL   |  392.00 |   2
 RETAIL   |  498.00 |   2
 RETAIL   |  500.00 |   3
 RETAIL   |  738.00 |   3
 RETAIL   | 1250.00 |   3
 RETAIL   | 2029.00 |   4
 RETAIL   | 2393.00 |   4
 RETAIL   | 3933.00 |   4

По сути, я пытаюсь взять среднее значение каждых n членов (здесь n = 3):

CUSTTYPE | AMOUNT  | NTILE
----------+---------+----------
 RETAIL   | 187.00 |   1
 RETAIL   | 389.33 |   2
 RETAIL   | 829.33 |   3
 RETAIL   | 2785.0 |   4

Из ссылки на Pig здесь кажется, что это можно сделать с помощью Over(), но я не смог найти пример того, как это можно сделать. Мысли?


person sedeh    schedule 15.04.2016    source источник


Ответы (1)


Вы можете ранжировать каждую запись ваших данных, используя оператор RANK:

http://pig.apache.org/docs/r0.14.0/basic.html#rank

так:

A = LOAD 'path' AS (schema);
B = RANK A;

а затем разделить каждый ранг на 3:

C = FOREACH B generate ($0 + 1) / 3 as NTILE, CUSTTYPE, AMOUNT;
person bartektartanus    schedule 18.04.2016