我有一个AggregateFunction,它计算WindowedStream中一系列事件的平均值。需要注意的是,需要对可能无序到达(或根本不到达)的事件对计算平均值。
换句话说,我需要在计算之前对数据进行排序,因为顺序很重要。
我可以使用getResult API来执行此操作,但是在窗口中的每个事件上都会调用此函数,这对性能没有意义。我也可以使用flink-cep执行此操作,但出于相同的原因,我想避免执行此操作。
理想情况下,当窗口关闭时,我只想最后计算平均值(我可以对数据进行一次排序。)>
是否有某种处理程序?我找到的最接近的东西是triggers,但是没有关闭窗口的方法。
谢谢
编辑:
我最终使用了ProcessWindowFunction with Incremental AggregationProcessWindowFunction可以与ReduceFunction结合使用,一个AggregateFunction或FoldFunction以增量聚合元素到达窗口时。关闭窗口后,聚合结果将提供给ProcessWindowFunction。这样,它就可以在可以访问的同时递增计算窗口ProcessWindowFunction的其他窗口元信息。
我有一个AggregateFunction,它可以计算WindowedStream中一系列事件的平均值。需要注意的是,需要对事件对计算平均值,而事件对可能超出...
代替AggregateFunction,您可以使用ProcessWindowFunction而不进行增量聚合。触发窗口时将调用此函数,并将传递包含窗口内容的Iterable和可用于发出结果的Collector。