Apache flink : клавиатурный и оконный оператор

Я хочу знать некоторые механизмы, связанные с 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
1 651
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Спасибо за ваш ответ. В документации по флинку я вижу следующий пример. Он ничего не делает, чтобы гарантировать тот же ключ, что вы сказали.

Cheng Jiang 26.10.2018 10:38

Вы имеете в виду, что у Фринка есть внутренняя гарантия, или мне нужно реализовать логическую гарантию самостоятельно. Кажется, я неправильно понял, что вы имеете в виду. :)

Cheng Jiang 26.10.2018 11:03

@ChengJiang Flink предоставляет эту внутреннюю гарантию, вам не нужно ничего внедрять.

gcandal 26.10.2018 13:11

Хорошо, я понял. Спасибо за ответ. :)

Cheng Jiang 26.10.2018 13:23

Другие вопросы по теме