级联总和操作

时间:2013-11-21 20:53:40

标签: java cascading

我对Cascading很新。现在我知道如何使用Cascading进行单词计数。接下来我想做一些Sum操作。例如,我有以下输入:

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

我想要SUM最后一个字段。如果我只选择该字段并执行COUNT,它将为我提供如下输出:

1000 1
2000 1
5000 1

这不是我想要的!我想要将所有这3个数字相加,并给它一个名为“duration”的名称,如下所示:

duration 8000

我可以将此字段命名为“duration”,但我不知道如何对其进行自我整理,并在输出到文件时将关键工作“持续时间”放在前面。

这是我尝试过的代码:

... // 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它仍然不起作用。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

由于您希望对所有值求和,即您只想要一个组,因此GroupBy的“字段”参数应为Fields.NONE。此外,由于您要对持续时间字段求和,因此您应该在Every中设置参数选择器。以下代码可以满足您的需求:

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