1

プロジェクトで Apache Storm の TridentTopology を使用したいと考えています。私は、storm.trident.Stream クラスの .each() 関数を理解するのが難しいと感じています。以下は、参照用のチュートリアルに記載されているサンプルコードです。

TridentTopology topology = new TridentTopology();        
TridentState wordCounts =
     topology.newStream("spout1", spout)
       .each(new Fields("sentence"), new Split(), new Fields("word"))
       .groupBy(new Fields("word"))
       .persistentAggregate(new MemoryMapState.Factory(), new Count(), new Fields("count"))                
       .parallelismHint(6);

メソッド .each() のシグネチャがわかりませんでした。以下は私が理解したものです。私が間違っている場合は修正してください。また、私の知識についてさらに情報を提供してください。

。各()

  • 最初のパラメーターは、スパウトから出力された値に関連付けられたキーであり、スパウトの getOutputFields() メソッドから返されるフィールドを受け取ります。なぜそのパラメーターが使用されるのかはまだわかりません。
  • 2 番目のパラメーターは、BaseFunction を拡張するクラスです。タプルを処理します。
  • 3 番目のパラメーターの理解は、1 番目のパラメーターと似ています。
4

1 に答える 1

3

最初のパラメーターは、入力タプルの射影です。あなたの例では、「文」という名前のフィールドのみが提供されていSplitます。ソースがスキーマを使用してタプルを出力する場合、 のFields("first", "sentence", "third")「文」にのみアクセスできますSplit。さらに、「文」のインデックスは 0 になります (1 ではありません) Split。出力への射影ではないことに注意してください。すべてのフィールドが出力タプルに残ります。内のタプル全体の限定的なビューSplitです。

最後のパラメータは、within にValue指定された のスキーマです。このフィールド名は、新しい属性として出力タプルに追加されます。したがって、出力タプルのスキーマは、入力タプルのスキーマ (元の、最初のパラメーターによって投影されていない) に、この最後のパラメーターのフィールドを加えたものになります。emit()Split

ドキュメントの「関数」セクションを参照してください: https://storm.apache.org/releases/0.10.0/Trident-API-Overview.html

于 2015-11-26T12:33:26.280 に答える