2016-06-02 16 views
0

雲のデータフローでは、サイズとステップを持つSlidingWindowの機会に要素を複数のウィンドウに割り当てることができます。実際には、隣接する2つのウィンドウ内の要素は、スライドするステップを除いてほぼ同じである、非常に小さなステップを有する大きなサイズのSlidingWindowを有すると仮定する。SlidingWindowsでデータフローが重複しないようにしますか?

SlidingWindowで計算すると、このウィンドウ内のすべての要素が読み込まれ、これらの要素の計算が開始されます。または、隣接するウィンドウは、計算結果の重複を避けるためにいくつかの計算結果を再利用できますか?要素が複数のウィンドウに割り当てられたときにコピーされるかどうか。

答えて

1

Dataflowには、SlidingWindowsのような特別な処理はありません。要素は、割り当てられたすべてのウィンドウで発生します。

通常、SlidingWindowsにはCombineFnという文字を使用しても、パフォーマンスに問題はありません。問題が発生している場合は、最初に試しておき、あなたが計算しようとしていることとあなたのウィンドウの詳細を詳細に追うことをお勧めします。

これを最適化として自動的に行うことは、ユーザー定義のウィンドウ、トリガー、順序外のデータ、およびシステム内に既に存在するその他の最適化があるとうまく機能しません。

+0

はい、ユーザー定義のケースでは、この種の最適化を行うのは難しいです。ここで別のケースを考えてみましょう。ストリーミングプロセスが開始されてから5分ごとにトップ10の頻度のクエリを計算したいのですが、トップ10はこの5分間でトップ10以外のグローバル状態ですhttp://stackoverflow.com/questions/33745935/long-lived-state-with-google-dataflowそれまで5分ごとにトリガし、最初から上位10個の要素を計算すると、コストは膨大になりすぎて耐えることができません。つまり、ユーザー定義の状態を保存する必要があります。 –

+0

1つのウィンドウ内で、上位10個の要素を追跡しても、すべての前の要素が再訪されるわけではありません。要素が入ると、 'Top'が実行され、アキュムレータのみが格納されます(およそユニークな要素から頻度カウントへのマッピング)。トリガが起動するたびに、このマップから上位10個の要素を読み取る必要があります。 –

+0

開始から5分ごとにトップ10を計算したい場合はどうすればよいですか? –

関連する問題