Я студент, изучающий, как использовать скрипт Pig в песочнице hortonworks. Моя проблема в том, что я не могу правильно использовать функцию SUM
. Я успешно разделил поля журнала брандмауэра, и я могу выполнять несколько запросов и использовать функцию подсчета ... но не повезло с функцией SUM
, которая мне действительно нужна в одном случае. Этот код я использовал ниже:
A = FOREACH logs_base GENERATE device_id,src,src_port,dst,dst_port,tran_ip,tran_port,service,duration,sent,rcvd,sent_pkt,rcvd_pkt,SN,user,group1, REGEX_EXTRACT(date, '\\d{3}-(\\d{2})-\\d{2}', 1) AS(month:chararray);
F1 = FILTER A BY user == 'PR11MS1120' and month == '10';
grpd1 = group F1 by user;
counter = foreach grpd1 {
sum1 = SUM(A.rcvd);
sum2 = SUM(A.sent);
generate sum1, sum2;
};
dump counter;
C = foreach F1 generate rcvd, sent;
dump C;
Когда я сбрасываю только переменную C
, я получаю результат, отображающий множество записей, указывающих количество данных, полученных / отправленных для примененного фильтра. например:
(223,123)
(334,444)
(21,12344)
(...,...)
Все, что я действительно хочу сделать, это сложить все эти записи вместе и показать общую сумму полученных и отправленных: (?,?)
.
Примечание. Я безуспешно пытался изменить тип переменной на int
, long
и chararray
.
Вот некоторые из ошибок, которые я получаю при попытке решить эту проблему:
Не удалось вывести функцию сопоставления для org.apache.pig.builtin.SUM, поскольку несколько или ни один из них не подходят. Пожалуйста, используйте явное приведение.