У меня есть AggregateFunction , которая вычисляет среднее значение по последовательности событий в WindowedStream .
Предостережение заключается в том, что среднее необходимо вычислять по парам событий, которыеможет прибыть из строя (или вообще не быть).
Другими словами, мне нужно отсортировать данные перед вычислением, потому что последовательность важна.
Я могу сделать это с помощью getResult API, но эта функциявызывается для каждого события в окне, что не имеет смысла в производительности.Я мог бы также сделать это с flink-cep , но я бы хотел избежать этого по той же причине.
В идеале, я хотел бы вычислять среднее значение только в самом конце(где я могу отсортировать данные один раз), когда окно закрыто.
Есть ли какой-нибудь обработчик для этого?Самым близким, что я нашел, было триггеров , но нет способа закрытия окна.
Спасибо
Редактировать:
В итоге я использовал ProcessWindowFunction с инкрементальной агрегацией
ProcessWindowFunction можно комбинировать с ReduceFunction, AggregateFunction или FoldFunction для постепенного агрегирования элементов по мере их поступления вокно.Когда окно закрыто, ProcessWindowFunction получит агрегированный результат.Это позволяет ему постепенно вычислять окна, имея доступ к дополнительной метаинформации окна ProcessWindowFunction.