Да, ProcessWindowFunction
служит именно для этой цели. Такая функция вызывается, когда окно завершено, и передается (среди прочего) Iterable, содержащий элементы потока, которые были назначены окну. В случае окна сеанса ProcessWindowFunction
не вызывается до тех пор, пока не истечет период бездействия.
Обновление: Как вы можете сообщить как начальную, так и конечную метки времени для каждого окна сеанса?
Я предполагаю, что вы можете извлечь метку времени для каждого события из самого события. Затем, если вы используете ProcessWindowFunction
, вы можете перебирать события в окне и определять минимальную и максимальную метки времени для событий в сеансе - это будут начальная и конечная метки времени.
Если, с другой стороны, вы предпочитаете использовать функцию Reduce, которая постепенно вычисляет результаты окна, вы можете работать с кортежами, которые отслеживают (min, max) временные метки для каждого окна.