Apache Flink - DataSet API - Как сгруппировать n результатов вместе - PullRequest
0 голосов
/ 27 июня 2018

Мы выполняем пакетную обработку с использованием Apache Flink (1.4.2) и по соображениям производительности вместо непосредственного вывода каждого элемента мы хотим сгруппировать 100 элементов перед его выводом.

Если бы мы использовали API DataStream, мы могли бы использовать что-то вроде падающих окон (https://ci.apache.org/projects/flink/flink-docs-release-1.5/dev/stream/operators/windows.html#tumbling-windows)

Но это недоступно при выполнении пакетной обработки.

Возможно ли это сделать с помощью DataSet Api, возможно, с помощью некоторой функции группировки / сокращения?

1 Ответ

0 голосов
/ 27 июня 2018

Если записи могут быть произвольно объединены вместе, я бы не использовал groupBy, reduce или groupReduce, потому что они излишне перетасовали бы и сортировали DataSet.

Вместо этого вы можете использовать MapPartitionFunction для пакетной записи вместе. MapPartition получает итератор для всех записей раздела и может создавать записи через коллектор. Поскольку он просто использует записи, не реорганизуя их (перемешать, сортировать), он очень эффективен.

...