我对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它仍然不起作用。任何人都可以帮助我吗?
答案 0 :(得分:1)
由于您希望对所有值求和,即您只想要一个组,因此GroupBy
的“字段”参数应为Fields.NONE
。此外,由于您要对持续时间字段求和,因此您应该在Every
中设置参数选择器。以下代码可以满足您的需求:
pipe = new GroupBy(pipe, Fields.NONE);
pipe = new Every(pipe, new Fields("duration"), new Sum(), Fields.ALL);