在flink聚合函数中修改输入对象是否安全?样本代码:
class Acc {
int sum = 0;
int max = 0;
}
public class MyAggFunc implements AggregateFunction<Integer, Acc, Acc> {
@Override
public Acc createAccumulator() {
return new Acc();
}
@Override
public Acc add(Integer value, Acc accumulator) {
accumulator.sum += value;
accumulator.max = Math.max(accumulator.max, value);
return accumulator
}
@Override
public Acc getResult(Acc accumulator) {
return accumulator
}
@Override
public Acc merge(Acc a, Acc b) {
a.max = Math.max(a.max, b.max);
a.sum += b.sum;
return a;
}
}
在add()和merge()中,我修改了输入累加器并返回它,以避免在每次调用中创建新对象。安全吗?
1条答案
按热度按时间e0bqpujr1#
你这样做的方式是的,它实际上是文档中的一个例子:https://nightlies.apache.org/flink/flink-docs-release-1.17/docs/dev/datastream/operators/windows/#aggregatefunction
如果您关心对象重用优化,以下是一些指导原则Flink, rule of using 'object reuse mode'