【问题标题】:Cascading Sum operation级联求和运算
【发布时间】:2013-11-21 20:53:39
【问题描述】:

我对级联非常陌生。现在我知道如何使用 Cascading 进行字数统计了。接下来我想做一些 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);

但它给了我上面显示的错误输出。

也许我不应该使用 Count,但我尝试了 SumBy,它仍然不起作用。谁能帮帮我?

【问题讨论】:

  • 也许你不应该数,当你想总结?
  • 到目前为止你尝试过什么?发布与您的问题相关的源代码!
  • 什么是Pipe,什么是GrouByEveryFields

标签: java cascading


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 2012-08-13
    相关资源
    最近更新 更多