Как получить количество элементов, присутствующих в функции суммы во Flink?

Я хочу получить количество элементов, присутствующих в функции суммы. Пример:

val counts = text.flatMap { _.toLowerCase.split("\\W+") }
      .map { (_, 1) }
      .keyBy(0)
      .timeWindow(Time.minutes(10))
      .sum(1)

выход:

hello : 4
world : 2
foo : 8
my : 5

Я хочу, чтобы на выходе число 4 соответствовало количеству элементов. Я не нахожу никакой функции, подобной count


person FlinkNoob    schedule 02.11.2017    source источник


Ответы (1)


Встроенные функции агрегации не очень гибкие. Есть только sum, min, max, minBy и maxBy. Они работают только с типами Tuple и не могут быть объединены.

Если вы хотите сделать что-то помимо одного простого агрегата, вам нужно реализовать собственный ReduceFunction или AggregateFunction. Другой вариант — взглянуть на Table API или SQL, которые также поддерживают групповые окна.

person Fabian Hueske    schedule 02.11.2017