Даже если в каждом окне фактически имеется несколько ключей, каждый вызов вашей функции process
/ reduce
/ sum
/ aggregate
выполняется с элементами с одинаковой клавишей.
В вашем примере вы можете просто использовать sum
, и Flink позаботится обо всем:
text.flatMap(new Tokenizer())
.keyBy(0)
.window(TumblingProcessingTimeWindows.of(Time.seconds(3)))
.sum(X)
Если вы решили пойти с reduce
вместо ...
text.flatMap(new Tokenizer())
.keyBy(0)
.window(TumblingProcessingTimeWindows.of(Time.seconds(3)))
.reduce(new ReduceFunction<Tuple2<String, Integer>>(){
@Override
public Tuple2<String, Integer> reduce(final Tuple2<String, Integer> first, final Tuple2<String, Integer> second) {
(... do something with the guarantee that first[0] == second[0] (same key) ...)
}
});