在flink聚合中修改输入是否安全?

zkure5ic  于 12个月前  发布在  Apache
关注(0)|答案(1)|浏览(100)

在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()中,我修改了输入累加器并返回它,以避免在每次调用中创建新对象。安全吗?

e0bqpujr

e0bqpujr1#

你这样做的方式是的,它实际上是文档中的一个例子:https://nightlies.apache.org/flink/flink-docs-release-1.17/docs/dev/datastream/operators/windows/#aggregatefunction
如果您关心对象重用优化,以下是一些指导原则Flink, rule of using 'object reuse mode'

相关问题