Комбинирование, агрегирование и уменьшение преобразований предпочтительнее, чем 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 Объединение