Я вычисляю статистику (min, avg и т. Д.) Для фиксированных окон данных.Данные передаются в виде отдельных точек и являются непрерывными (например, температура).
Мой текущий конвейер (упрощенный для этого вопроса) выглядит следующим образом:
read -> window -> compute stats (CombineFn) -> write
Проблема в том, что статистика каждого окна неверна, так как не имеет базовой линии.Под этим я подразумеваю, что я хочу, чтобы статистика каждого окна включала одну точку данных (самую последнюю) из данных предыдущего окна.
Один из способов думать об этом состоит в том, что входная PCollection каждого окна должна включать теэто обычно было бы в окне из-за их временной метки, но также и из-за одной дополнительной точки из PCollection предыдущего окна.
Я не уверен, как мне поступить так.Вот некоторые вещи, о которых я подумал:
- Дублирование самой последней точки данных в каждом окне с измененной временной меткой, такой, что она попадает в таймфрейм следующего окна
- Аналогично, создайтеодноэлементное PCollectionView для каждого окна, которое включает в себя измененную версию своей последней точки данных, которая будет использоваться как боковой вход для объединения со следующим входным окном PCollection
Одно ограничение состоит в том, что если окно нене должно быть никаких новых точек данных, кроме той, которая была передана ему, он должен переслать это значение в следующее окно.