从之前的 windows 获取值

Getting values from previous windows

我正在计算固定 windows 数据的统计数据(最小值、平均值等)。数据作为单点流入并且是连续的(如温度)。

我当前的管道(针对此问题进行了简化)如下所示:

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

问题是每个 window 的统计数据都不正确,因为它们没有基准。也就是说,我的意思是我希望每个 window 的统计数据都包含来自前一个 window 数据的单个数据点(最新的一个)。

考虑这一点的一种方法是,每个 window 的输入 PCollection 应包括由于时间戳而通常在 window 中的那些,但也应包括来自 window 的一个额外点上一个 window 的 PCollection。

我不确定我应该怎么做。以下是我想做的一些事情:

一个约束是,如果 window 没有任何新的数据点,除了转发给它的数据点,它应该 re-forward 那个值到下一个 window.

听起来您可能需要将值从一个 window 复制到任意多个未来 windows。我知道如何做到这一点的唯一方法是通过 state and timers

您可以编写一个有状态的 DoFn,它对全局 windowed 数据进行操作,并在其状态中存储每个 window 的最新(按时间戳)元素,并在每个 window 时触发一个计时器] 将此元素边界到后续 window。 (您可以利用 Latest 组合操作来获取每个 window 的最新元素,而不是手动执行。)将其与原始数据展平,然后 windowing 应该会给您值你想要。