2017-02-10 10 views
0

私は、キーとタイムスタンプを持つストリームがあると仮定します。これらのキーのデカルト積を各ウィンドウ(スライディングウィンドウ)に作成したいと思います。私は、キー1,2,3,4と私は2つの並列処理を設定しているを持っている場合は、私は次のように「グループ」、それらをしたい:フライングストリーミング - ストリームのデカルト積と窓掛け

1 - 2 2 - 3 
1 - 3 2 - 4 
1 - 4 3 - 4 

そして、私はグループごとあたりの要素を処理したいです窓。上の要素(1,2,3,4)がタイムスタンプに基づいて同じウィンドウ内にあると想像してください。

最も単純な形で私の質問は、各スライディングウィンドウ(いくつかのキーが含まれているかもしれません)にいくつかの要素がある場合、上記の例のようにこれらのキーの組み合わせを作成し、 。私がこれまで試してみました何

は、

.assignAscendingTimestamps(...) 
.keyBy(...) 
.timeWindow(Time.seconds(5),Time.seconds(5)) 
.apply(...) 

の使用であるが、これは唯一のキーごとにアルゴリズムを適用する、プラスの組み合わせを作成することができません。

私はこの文書を見てきました。:P.S:https://cwiki.apache.org/confluence/display/FLINK/Streams+and+Operations+on+Streams

と私は離散化ストリームがトリックが行うだろう述べたと思いますが、彼らはFLINK 1.2(または他のバージョン)では使用できません。

+0

たぶん私はこの権利を取得しますが、**あなたは 'timeWindow'上を作成するので**、与えられた例では動作することはできません「(複数のキーが含まれる可能性があります)各スライディングウィンドウ内のいくつかの要素与えられ」ていませんよ'KeyedStream'です。したがって、 'timeWindow'内のすべての要素はまったく同じキーを持ちます。 – Patze

+0

あなたは正しく理解しています。各スライディングウィンドウに複数のキーが必要です。ストリームがあれば、可能なすべてのペアを作成し、これらのペアをスライディングウィンドウで処理したいと考えています。 –

答えて

2

ストリーミングコンテキストのkeyBy()は、バッチ処理コンテキストではgroupBy()と同等の効果があります。 KeySelectorに基づいて、ストリームをいくつかのサブストリームに分割します。それらはあなたのtimeWindowに送られます。したがって、あなたの現在の例は、KeyedStreamtimeWindowです。 timeWindowに入って、後で適用する関数に放出されるすべての要素は、まったく同じキーを持ちます。 Flinkでのウィンドウイングについての素敵な紹介は、ウィンドウの使い方の詳細をいくつか紹介しています。https://flink.apache.org/news/2015/12/04/Introducing-windows.html キーに意味情報が含まれていて、同じウィンドウ内で異なるキーを使用する場合は、レコードに割り当てる人工キー(例:単純な整数)を作成できます。このキーに基づいて、グループ化とストリーム分割をより細かく制御できます。 前の手順の結果を集めて結合する最後の計算では、追加の手順が必要です(例:joinまたはreduce)。 ここで最初の例を見てみましょう:https://ci.apache.org/projects/flink/flink-docs-release-1.2/dev/datastream_api.html sum()関数を使用して、timeWindowの5秒間に所定のキーを持つすべての要素を数えます。結果には、ウィンドウごとにキーごとに1つの要素が含まれます。

+0

キーに意味情報が含まれていて、同じウィンドウ内に異なるキーを使用する場合は、レコードに割り当てる人工キー(例:単純な整数)を作成できます。これは非常に論理的なアプローチですが、キー間に可能なすべてのペアが必要な場合はどうなりますか?どのようにFlinkでそれを実装できますか? –

+0

あなたはFLINKドキュメントからの例では '合計()'の操作から得る結果を見れば、あなたは ''でDataStream >得ます。一般に、 'sum()'は 'Datastream'を返します。したがって' map() 'や' flatMap'のように 'Datastreams 'に許される変換結果を得ることができます。リリースのドキュメントhttps://ci.apache.org/projects/flink/flink-docs-release-1.2/dev/datastream_api.htmlでは、どの入力がどの操作で実行できるのか、どの項目がどのように出力されるのか最後のデータ。 – Patze