Разъяснение о GroupCombine относительно частичных результатов - PullRequest
0 голосов
/ 27 августа 2018

Документация Флинка для GroupCombine состояний:

Примечание: GroupCombine в Grouped DataSet выполняется в памяти с помощью жадной стратегии, которая может обрабатывать не все данные одновременно, а в несколько этапов. Это также выполняется на отдельных разделах без обмена данными, как при преобразовании GroupReduce. Это может привести к частичным результатам.

со следующим замечанием для полных (не сгруппированных) DataSet с:

GroupCombine для полного набора данных работает аналогично GroupCombine для сгруппированного набора данных. Данные распределяются по всем узлам, а затем объединяются жадным способом (т. Е. Одновременно объединяются только данные, помещающиеся в память).

Означает ли это, что если мой набор данных состоит, например, из:

1
2
3

и я хочу сгенерировать все попарные комбинации

(1, 2), (1, 3), (2, 3)

Я не могу реализовать это в общем виде с помощью преобразования GroupCombine, потому что это не гарантирует, что вся группа поместится в памяти данного раздела?

1 Ответ

0 голосов
/ 28 августа 2018

GroupCombine является недетерминированной операцией в Flink. Обычно он используется для выполнения частичных вычислений (например, агрегации) и сопровождается детерминированной операцией, такой как GroupReduce, которая потребляет частичные результаты. GroupCombine обычно используется для снижения стоимости детерминированной операции путем выполнения менее дорогих локальных вычислений в памяти.

Если вам нужно вычислить детерминированные результаты для групп записей, вы должны использовать GroupReduce.

...