Я пытаюсь выполнить операцию суммирования со свиньями.Как сделать «подведение итогов» на латинском языке?
К примеру, у меня есть таблица с именем t3
:
product price country
A 5 Italy
B 4 USA
C 12 France
A 5 Italy
B 7 Russia
мне нужно сделать операцию реферирования, используя 2 ключа: product
и country
.
- я операцию конкатенации, используя
product
иcountry
- Я должен рассчитать цену, суммируя значения цен только где
CONCAT
результат повторяет - Где
CONCAT
результат не повторяется, цена остается такой же, как вt3
таблица.
Ожидаемый выход может быть:
CONCAT Price_1
AItaly 10
BUSA 4
CFrance 12
BRussia 7
В свинью я пишу следующий скрипт (код неправильно, а просто показать идею):
t3 = LOAD '/home/Desktop/3_table/3_table.data' AS (product:chararray, price:int, country:chararray);
c1 = FOREACH t3 GENERATE CONCAT(product, country);
c2 = FOREACH t3 GENERATE *, c1;
product_1 = GROUP c2 BY c1;
price_1 = FOREACH product_1 GENERATE group, SUM(product_1.price);
STORE price_1 INTO 'summarise_by_2_ID' USING PigStorage('\t');
Может быть кто-то может объяснить как достичь ожидаемого результата? Большое спасибо!
Могу ли я спросить только об одном? Если мне нужно «классифицировать» ту же таблицу. Ожидаемый результат может быть: A (A, 5, Италия), (A, 5, Италия) B (B, 4, США), (B, 7, Россия) C (C, 12, Франция) \t КОД: t2 = LOAD '/home/Desktop/2_table/2_table.data' AS (продукт: chararray, цена: int, страна: chararray); A = GROUP t2 BY product; C = FOREACH A GENERATE группа $ 1, COUNT ($ 1); STORE C INTO 'Classify' ИСПОЛЬЗОВАНИЕ PigStorage ('\ t'); Но я получаю сообщение об ошибке, свиньи не нравится diffinition $ 1. Есть ли другой способ определить первый элемент в: (A, 5, Italy), (A, 5, Italy), так что я могу считать, что A repeatc 2 раза? – Ale
Я не понимаю, что вы хотите сделать, но что-то вроде этого может помочь: 'C = FOREACH A GENERATE group, $ 1, COUNT ($ 1);' – Frederic
возвращает: '' (A, {(A, 5, Italy)), (A, 5, Италия)}, 2) (B, {(B, 4, США), (B, 7, Россия)}, 2) (C, {(C, 12, France)} , 1) '' – Frederic