2013-11-21 62 views
1

我對層疊很有新意。現在我知道如何使用級聯來完成字數統計。接下來我想做一些Sum操作。例如,我有以下輸入:級聯求和操作

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

我想彙總最後一個字段。如果我只是選擇該領域,並做COUNT它會給我這樣的輸出:

1000 1 
2000 1 
5000 1 

這不是我想要的!我要總結所有這些3個號碼,並給它一個被稱爲「持續時間」,它看起來像名稱:

duration 8000 

我可以命名這個領域被稱爲「持續時間」,但我不知道如何總結它本身並在輸出到文件時將關鍵工作「持續時間」放在前面。

這是我試過的代碼:

... // 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); 

但它給了我錯誤的輸出,我已經如上圖所示。

也許我不應該使用計數,但我試過SumBy它仍然不起作用。誰能幫我?

+0

也許你不應該數,當你想總結? – isnot2bad

+0

你到目前爲止嘗試過什麼?發佈與您的問題相關的源代碼! – isnot2bad

+0

什麼是'管道',什麼'GrouBy','Every','Fields'? – 2013-11-21 21:20:15

回答

1

由於您希望獲得所有值的總和,即您只需要一個組,因此GroupBy的「fields」參數應爲Fields.NONE。此外,由於您正在總結持續時間字段,因此您應該將該參數選擇器設置爲Every。下面的代碼做你想要的:

pipe = new GroupBy(pipe, Fields.NONE); 
pipe = new Every(pipe, new Fields("duration"), new Sum(), Fields.ALL);