2016-06-02 3 views
1

Мне нужно присоединиться к двум клавишам в окне. Но мне нужно сначала свести два потока, а затем применить объединение в совокупности все в одном окне.Уменьшите и присоединитесь к окну

Я потратил некоторое время на APIs FLiNK, и я считаю, что такое применяется функция существует в WindowedStream

общественного SingleOutputStreamOperator применяются (ReduceFunction reduceFunction, функция WindowFunction)

Но я не могу найти аналогичная функция в JoinStream. Вопрос: Будет ли это полезным дополнением к Flink. Есть обходное решение, которое я могу использовать пока.

ответ

0

Если вы используете семантику времени обработки, вы можете просто применить агрегацию окна к каждому входному потоку самостоятельно и подать результат в соединение (конечно, оба агрегата и соединение должны использовать одно и то же определение окна).

Что-то вроде этого:

WindowAssigner w = ... 
reducedStream1 = stream1.keyBy(...).window(w).apply(...); 
reducedStream2 = stream2.keyBy(...).window(w).apply(...); 
reducedStream1.join(reducedStream2) 
       .where(...).equalTo(...) 
       .window(w).apply(...); 

Для обработки времени, вам нужно будет написать вам собственный оператор с помощью:

stream1.coGroup(stream2) 
     .where(...).equalTo(...) 
     .window(...).apply(CoGroupFnction); 
+0

Я использую время события, и я в конечном итоге его реализации с использованием coGroup как и то, что вы предложили. Благодарю. –

Смежные вопросы