Объединить вложенные повторяющиеся поля в массив в Apache Beam - PullRequest
0 голосов
/ 10 мая 2018

У меня есть коллекция записей, для простоты скажем следующее (через запятую):

A1, B1, C1 
A1, B1, C1'
A1, B2, C2

Когда я передаю его через Beam как PCollection, я сопоставляю каждый объект в объект, используя ParDo. Теперь я хочу объединить их в

A1: {
 B1: [C1, C1'],
 B2: C2
}

Для пар ключ-значение я могу использовать GroupByKey, но что, если структура чрезвычайно вложенная, где повторяющиеся поля могут быть на каждом уровне? Есть ли какие-либо преобразования для объединения повторяющихся полей?

1 Ответ

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

Вы можете наивно применять преобразование GroupByKey подряд. Сначала группа по B, затем группа по A. Однако это крайне неэффективно, поскольку все пары ключ-значение должны оставаться в памяти во время каждого шага GroupByKey.

Преобразование Combine.PerKey аналогично GroupByKey, но дополнительно позволяет указать класс аккумулятора с пользовательской логикой для объединения значений. Эти значения могут быть любого типа, например, повторяющиеся поля или чрезвычайно вложенные объекты.

Справка:
1. Apache Beam Combine.PerKey

...