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