我需要在Flink有一个聚集窗口。我不能使用聚合函数。因为getresult计算需要状态访问。所以我试着用聚合和过程:
.aggregate(
new AggregateFunction<Entry, Double, Double>() {
...........
};
, new ProcessWindowFunction<Double,Result,Entry,TimeWindow>() {
@Override
public void process(Entry item,
ProcessWindowFunction<Double, Result, Entry, TimeWindow>.Context ctx,
Iterable<Double> aggInput, Collector<Result> output) throws Exception {
}
}
但是,我仍然只需要agginput的最新值,而且我不认为有理由将其保存在内存中,在我的应用程序中,它可能是数以百万计的数据。所以我想如果我能清除每次窗口的数据。
1条答案
按热度按时间qc6wkl3g1#
当你把一个
AggregateFunction
用一个ProcessWindowFunction
,只有聚合的最新值保持在窗口状态,并且发送到process方法的iterable将只包含一个预聚合的条目(一ReduceFunction
将以同样的方式工作。)换句话说,您正在寻找的优化已经存在。文档有更多的细节。