Есть ли эквивалент оператора foldLeft в 1.4 Apache Flink DataStream?

У меня есть такая настройка потока с использованием Apache Flink 1.4, начинается с DataStream, затем keyBy, затем window, затем агрегат

выходом агрегированной операции является объект AggregateResult, поэтому поток, который сейчас заканчивается, имеет тип SingleOutputStreamOperator

То, что я хотел бы сделать дальше, - это эквивалент scala foldLeft. Есть ли оператор, который предоставляет такую ​​возможность?

Спасибо


person jwe4    schedule 23.12.2017    source источник


Ответы (1)


Flink 1.4 предоставляет AggregateFunction, который похож на foldLeft.

API функции AggregateFunction работает следующим образом: Начальное (или начальное) значение определяется в методе createAccumulator(). Аккумулятор хранит частично агрегированное значение. Значения агрегируются в аккумулятор с помощью метода add(). Наконец, результат вычисляется из аккумулятора методом thegetResult().

Отличие от foldLeft в том, что AggregateFunction может объединять свои аккумуляторы (частичные агрегаты) с помощью своего merge() метода. Возможность объединения частичных агрегатов требуется для некоторых типов окон (окон сеанса) и полезна для определенных оптимизаций.

person Fabian Hueske    schedule 24.12.2017