Как получить среднее с рядами в свинье - PullRequest
0 голосов
/ 28 мая 2020

Посредством следующей обработки

REGISTER 's3://jmh-dtg-2016/jeon_dtg/test.py' USING jython as test;
raw01  = LOAD 's3://jmh-dtg-2016/jeon_dtg/test_pig.csv' USING org.apache.pig.piggybank.storage.CSVExcelStorage(',', 'NO_MULTILINE', 'UNIX', 'SKIP_INPUT_HEADER');
raw02 = FOREACH raw01 GENERATE (chararray)$2 as date, (chararray)$3 as code, (chararray)$4 as car_num, (chararray)$5 as pre_time, (FLOAT)$8 as vel, (chararray)$18 as link_id;
raw03 = GROUP raw02 BY (link_id, car_num);
raw04 = FOREACH raw03 GENERATE group, test.my_fun(raw02.vel) AS val;
dump raw04;

Получил эти результаты

введите описание изображения здесь

Я хочу получить среднее значение каждой строки. В заключение хочу получить такие результаты:

{(39.0),(45.0)}) -> 42 
{(1.0)}) -> 1

Это функция python, которую я использовал.

@outputSchema('num01:float')
def my_fun(data01):
    a = data01
    b = sorted(a)
    c = int((len(b)/100.0) * 10.0)
    d = int((len(b)/100.0) * 90.0)
    e = b[c:d]
    return e

и это невозможно

 @outputSchema('num01:float')
    def my_fun(data01):
        a = data01
        b = sorted(a)
        c = int((len(b)/100.0) * 10.0)
        d = int((len(b)/100.0) * 90.0)
        e = b[c:d]
        return sum(e)

помогите пожалуйста ..

1 Ответ

0 голосов
/ 29 мая 2020

Похоже, вам просто нужно получить среднее значение из набора ценностей? Поправьте меня если я ошибаюсь. Оператор PIG AVG должен это сделать, и он будет более производительным, чем Python UDF.

raw04 = FOREACH raw03 GENERATE group, AVG(raw02.vel) AS val;
...