Получение значений из предыдущих окон - PullRequest
1 голос
/ 11 июня 2019

Я вычисляю статистику (min, avg и т. Д.) Для фиксированных окон данных.Данные передаются в виде отдельных точек и являются непрерывными (например, температура).

Мой текущий конвейер (упрощенный для этого вопроса) выглядит следующим образом:

read -> window -> compute stats (CombineFn) -> write

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

Один из способов думать об этом состоит в том, что входная PCollection каждого окна должна включать теэто обычно было бы в окне из-за их временной метки, но также и из-за одной дополнительной точки из PCollection предыдущего окна.

Я не уверен, как мне поступить так.Вот некоторые вещи, о которых я подумал:

  • Дублирование самой последней точки данных в каждом окне с измененной временной меткой, такой, что она попадает в таймфрейм следующего окна
  • Аналогично, создайтеодноэлементное PCollectionView для каждого окна, которое включает в себя измененную версию своей последней точки данных, которая будет использоваться как боковой вход для объединения со следующим входным окном PCollection

Одно ограничение состоит в том, что если окно нене должно быть никаких новых точек данных, кроме той, которая была передана ему, он должен переслать это значение в следующее окно.

1 Ответ

1 голос
/ 14 июня 2019

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

Вы можете написать DoFn с отслеживанием состояния, который работает с глобально оконными данными и сохраняет в своем состоянии самый последний (по временной метке) элемент для каждого окна и запускает таймер на каждой границе окна этого элемента в последующее окно.(Возможно, вы можете использовать операцию объединения Latest , чтобы получить последний элемент для окна, а не делать это вручную.) Сведение этого с вашими исходными данными и последующим использованием окон должно дать вам желаемые значения.

...