2015-07-16 3 views
0

У меня есть несколько файлов с одинаковыми столбцами, и я пытаюсь агрегировать значения в двух столбцах с помощью SUM.Объединить несколько столбцов с помощью PIG

Структура колонки ниже

ID first_count second_count name desc 
1 10   10   A A_Desc 
1 25   45   A A_Desc 
1 30   25   A A_Desc 
2 20   20   B B_Desc 
2 40   10   B B_Desc 

Как я могу суммировать first_count и second_count?

ID first_count second_count name desc 
1 65   80   A A_Desc 
2 60   30   B B_Desc 

Ниже приведен сценарий, я написал, но когда я исполню его, я получаю сообщение об ошибке «Не удалось вывести функцию сопоставления для SUM, как кратному ни один из них fit.Please использовать явное приведение.

A = LOAD '/output/*/part*' AS (id:chararray,first_count:chararray,second_count:chararray,name:chararray,desc:chararray); 
B = GROUP A BY id; 

C = FOREACH B GENERATE group as id, 
       SUM(A.first_count) as first_count, 
       SUM(A.second_count) as second_count, 
       A.name as name, 
       A.desc as desc; 
+0

Не пытайтесь использовать A. * IIRC, который не является необходимым. 'SUM (first_count) в качестве first_count, SUM (second_count) в качестве second_count, имя как имя, по убыванию, как по алфавиту,' –

ответ

1

Ваше заявление нагрузки неправильно. first_count, second_count загружается как chararray. Сумма не может добавить две строки. Если вы уверены, что эти столбцы будут принимать только цифры затем загрузить их в междунар. Попробуйте this-

A = LOAD '/output/*/part*' AS (id:chararray,first_count:int,second_count:int,name:chararray,desc:chararray); 

Это должно сработать.

+0

Спасибо, что сделал трюк. –

Смежные вопросы