Предположим, у меня есть поток с ключами и отметками времени. Я хочу создать декартово произведение этих ключей в каждом окне (скользящее окно). Если у меня есть ключи 1,2,3,4 и я установил параллелизм на два, я хочу «сгруппировать» их следующим образом:
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(...)
но это будет применять только алгоритм для каждого ключа, плюс невозможно создать комбинации.
PS: Я видел этот документ: https://cwiki.apache.org/confluence/display/FLINK/Streams+and+Operations+on+Streams
и я думаю, что упомянутые здесь дискретизированные потоки сработают, но они недоступны во flink 1.2 (или любой другой версии).
timeWindow
наKeyedStream
. Таким образом, все элементы в вашемtimeWindow
будут иметь один и тот же ключ. - person Patze   schedule 13.02.2017