Почему в Scio вы предпочитаете агрегат над groupByKey? - PullRequest
0 голосов
/ 12 мая 2018

От:

https://github.com/spotify/scio/wiki/Scio-data-guideline

"Предпочитайте комбинировать / агрегировать / уменьшать преобразования по сравнению с groupByKey. Имейте в виду, что операция сокращения должна быть ассоциативной и коммутативной."

Почему, в частности, предпочтительнее агрегат, чем groupByKey?

1 Ответ

0 голосов
/ 12 мая 2018

Комбинирование, агрегирование и уменьшение преобразований предпочтительнее, чем groupByKey, поскольку первые более эффективны в памяти во время выполнения конвейера.Это связано с реализацией примитивов GroupByKey и Combine в Apache Beam.Ответ на этот вопрос не обязательно специфичен для Scio.

GroupByKey требует, чтобы все пары ключ-значение оставались в памяти, что может привести к OutOfMemoryError с.Все пары ключ-значение остаются в памяти для каждого окна.groupByKey использует примитивное преобразование Beam GroupByKey.

Агрегации устраняют необходимость хранить все значения в памяти, поскольку значения непрерывно объединяются / уменьшаются во время выполнения преобразования.Значения объединяются / уменьшаются в недетерминированном порядке, поэтому все операции объединения / сокращения должны быть ассоциативными.Реализация Scio aggregateByKey использует примитивное преобразование Beam Combine.

Ссылки:
1. Scio groupByKey
2. Scio aggregateByKey
3. Apache Beam GroupByKey
4. Apache Beam Объединение
5. Облачный поток данных Google Объединение

...