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

しかし、それは私が上に示した間違った出力を私に与えます。

Count を使うべきではないかもしれませんが、SumBy を試してみましたが、それでもうまくいきません。誰でも私を助けることができますか?

4

1 に答える 1

1

すべての値の合計が必要なため、つまり 1 つのグループだけが必要なため、"fields" パラメーターは にするGroupBy必要がありますFields.NONE。また、期間フィールドを合計しているので、それを の引数セレクターにする必要がありますEvery。次のコードは、必要なことを行います。

pipe = new GroupBy(pipe, Fields.NONE);
pipe = new Every(pipe, new Fields("duration"), new Sum(), Fields.ALL);
于 2013-12-07T20:44:54.383 に答える