2013-11-21 4 views
1

Я очень новичок в вопросе каскадирования. Теперь я знаю, как делать подсчет слов, используя Cascading. Затем я хочу выполнить некоторую операцию Sum. Например, у меня есть следующий вход:Операция каскадной суммы

a b c 1000 
c d e 2000 
a s e 5000 

Я хочу, чтобы последнее поле. Если я просто выбрать это поле и сделать COUNT это даст мне выход, как:

1000 1 
2000 1 
5000 1 

Это не то, что я хочу !! Я хочу, чтобы просуммировать все эти 3 номера и дать ему имя, которое называется «длительность», которая выглядит следующим образом:

duration 8000 

Я могу назвать это поле, которое называется «длительность», но я не знаю, как SUM он сам и поставил ключевую работу «длительность» фронта при выходе в файл.

Это код, который я попробовал:

... // get duration Field 
// determine the word counts 
Pipe pipe = new Pipe("pipe", docPipe); 
pipe = new GroupBy(pipe, new Fields("duration")); 
pipe = new Every(pipe, Fields.ALL, new Count(), Fields.ALL); 

Но это дает мне неправильный вывод, который я показал выше.

Возможно, я не должен использовать Count, но я попробовал SumBy, он все еще не работает. Может кто-нибудь мне помочь?

+0

Возможно, вам не стоит рассчитывать, когда вы хотите подвести итог? – isnot2bad

+0

Что вы пробовали? Отправьте исходный код, который имеет отношение к вашей проблеме! – isnot2bad

+0

Что такое 'Pipe', какие' GrouBy', 'Every',' Fields'? –

ответ

1

Поскольку вы хотите получить сумму по всем значениям, то есть хотите только одну группу, параметр «полей» равен GroupBy должен быть Fields.NONE. Кроме того, поскольку вы суммируете поле продолжительности, вы должны сделать это селектором аргументов в Every. Следующий код делает то, что вы хотите:

pipe = new GroupBy(pipe, Fields.NONE); 
pipe = new Every(pipe, new Fields("duration"), new Sum(), Fields.ALL); 
Смежные вопросы