Apache Flink: клавиша и оконный оператор - PullRequest
0 голосов
/ 26 октября 2018

Я хочу знать некоторые механизмы, связанные с keyedstream.Код выглядит следующим образом:

DataStream<Tuple2<String, Integer>> counts =
            // split up the lines in pairs (2-tuples) containing: (word,1)
            text.flatMap(new Tokenizer())
            // group by the tuple field "0" and sum up tuple field "1"
                    .keyBy(0)
                    .window(TumblingProcessingTimeWindows.of(Time.seconds(3)))

Если я хочу реализовать окно WordCount.

Q1: есть только одна клавиша в каждом окне или несколько клавиш?

Q2: Для функций в окне я использую только простую сумму ++ или мне нужно обрабатывать сумму нескольких клавиш черезХеш-карта в окне, как Apache Storm.

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 26 октября 2018

Даже если в каждом окне фактически имеется несколько ключей, каждый вызов вашей функции 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) ...)
            }
      });
...