Мне нужно выполнить некоторые числовые операции (используя UDF) в каждом столбце моей таблицы. И для каждого столбца я получаю 2 значения (средний и стандартный-dev). Но конечный результат близок как (mean_1, sd_1, mean_2, sd_2, mean_3, sd_3...)
, где 1,2...
- это индексы столбцов. Но мне нужен вывод для каждого столбца в отдельной строке. Как:Хранение результатов каждой операции столбца в отдельной строке в свинке
mean_1, sd_1 \\for col1
mean_2, sd_2 \\for col2
...
Вот сценарий свинья Я использую:
data = LOAD 'input_file.csv' USING PigStorage(',') AS (C0,C1,C2);
grouped_data = GROUP data ALL;
res = FOREACH grouped_data GENERATE FLATTEN(data), AVG(data.$1) as mean, COUNT(data.$1) as count;
tmp = FOREACH res {
diff = (C1-mean)*(C1-mean);
GENERATE *,diff as diff;
};
grouped_diff = GROUP tmp all;
sq_tmp = FOREACH grouped_diff GENERATE flatten(tmp), SUM(tmp.diff) as sq_sum;
stat_tmp = FOREACH sq_tmp GENERATE mean as mean, sq_sum/count as variance, SQRT(sq_sum/count) as sd;
stats = LIMIT stat_tmp 1;
Может кто-нибудь пожалуйста, руководство меня о том, как достичь этого?
Таким образом, вы хотите использовать только одну строку данных результата? – LiMuBei
Можете ли вы вставить свой свиной скрипт? –
@LiMuBei: да только одна строка, содержащая результаты ... также я включил pigscript –