Angenommen, ich habe einen Stream mit Schlüsseln und Zeitstempeln. Ich möchte das kartesische Produkt dieser Schlüssel in jedem Fenster erstellen (Schiebefenster). Wenn ich die Tasten 1,2,3,4 haben, und ich habe die Parallelität auf zwei gesetzt, ich will „Gruppe“, um sie auf die folgende Weise:Flink Streaming - kartesisches Produkt und Windowing über Streams
1 - 2 2 - 3
1 - 3 2 - 4
1 - 4 3 - 4
Und ich möchte die Elemente pro Gruppe verarbeiten pro Fenster. Stellen Sie sich also vor, dass die obigen Elemente (1,2,3,4) basierend auf ihren Zeitstempeln im selben Fenster liegen. In der einfachsten Form ist meine Frage: Wenn ich einige Elemente in jedem gleitenden Fenster (die mehrere Schlüssel enthalten könnten) habe, möchte ich die Kombinationen dieser Schlüssel wie im obigen Beispiel erstellen und einen benutzerdefinierten Algorithmus auf diese gruppierten Elemente anwenden .
Was ich bisher versucht, ist die Verwendung von
.assignAscendingTimestamps(...)
.keyBy(...)
.timeWindow(Time.seconds(5),Time.seconds(5))
.apply(...)
aber dies wird nur einen Algorithmus pro Schlüssel anwenden, sowie die Kombinationen können nicht erstellt werden.
P. S .: Ich habe dieses Dokument gesehen haben: denken https://cwiki.apache.org/confluence/display/FLINK/Streams+and+Operations+on+Streams
und ich, daß die diskretisierten Ströme erwähnt es würde den Trick tun, aber sie sind in flink 1.2 (oder einer anderen Version) nicht zur Verfügung.
Vielleicht bekomme ich das nicht richtig, aber ** "einige Elemente in jedem gleitenden Fenster (die möglicherweise mehrere Schlüssel enthalten)" ** kann nicht mit dem gegebenen Beispiel arbeiten, weil Sie ein 'timeWindow' an erstellen ein 'KeyedStream'. Somit haben alle Elemente in Ihrem 'timeWindow' genau den gleichen Schlüssel. – Patze
Sie haben richtig verstanden. Ich möchte, dass jedes Schiebefenster mehrere Tasten hat. Bei einem Stream möchte ich alle möglichen Schlüsselpaare erstellen und diese Paare in einem gleitenden Fenster zusammen verarbeiten. –