【发布时间】:2019-06-11 15:33:11
【问题描述】:
我正在计算固定数据窗口的统计数据(最小值、平均值等)。数据作为单点流入并且是连续的(如温度)。
我当前的管道(针对这个问题进行了简化)如下所示:
read -> window -> compute stats (CombineFn) -> write
问题在于每个窗口的统计数据都不正确,因为它们没有基线。我的意思是,我希望每个窗口的统计信息都包含来自前一个窗口数据的单个数据点(最新的一个)。
考虑这一点的一种方法是,每个窗口的输入 PCollection 应包括由于其时间戳而通常在窗口中的输入,但还应包括前一个窗口的 PCollection 的一个额外点。
我不确定我应该如何去做。以下是我想做的一些事情:
- 复制每个窗口中的最新数据点,并修改时间戳,使其落在下一个窗口的时间范围内
- 同样,为每个窗口创建一个 PCollectionView 单例,其中包括其最新数据点的修改版本,该数据点将作为侧输入使用,以合并到下一个窗口的输入 PCollection
一个限制是,如果一个窗口没有任何新的数据点,除了转发给它的那个,它应该将该值重新转发到下一个窗口。
【问题讨论】:
-
请发布一些代码来显示您尝试过的内容。
-
可以找到与您在第一点中描述的类似的实现here
-
@GuillemXercavins 我已经为管道的不同部分这样做了。这里的区别是我只想要一个(最新的)值被复制。考虑到延迟发射,这有点令人费解。
标签: java python apache-beam