Apache Beam - GroupByKey после создания окон с использованием нескольких ключей? - PullRequest
0 голосов
/ 07 мая 2019

Я строю конвейер, используя Apache Beam Java SDK, начиная с Шаблон PubSubToBigQuery , предоставленный Google (конвейер будет выполняться в облачном потоке данных Google).

Я использую Windowing для агрегирования данных и сохранения сгруппированных данных. Например:

1) a_id: 1 b_id: 2 c_id: 3 name: name1 value: 1
2) a_id: 1 b_id: 1 c_id: 3 name: name2 value: 1
3) a_id: 1 b_id: 2 c_id: 3 name: name3 value: 2
4) a_id: 1 b_id: 1 c_id: 3 name: name4 value: 1
5) a_id: 1 b_id: 1 c_id: 3 name: name5 value: 4
6) a_id: 2 b_id: 1 c_id: 3 name: name6 value: 1

Я получаю этот блок данных в своем 1-минутном окне, я хочу сгруппировать их по a_id , b_id и c_id и подсчитать строки, поэтому я ожидал бы это как результат агрегации:

1) a_id: 1 b_id: 2 c_id: 3 count: 2
2) a_id: 1 b_id: 1 c_id: 3 count: 3
3) a_id: 2 b_id: 1 c_id: 3 count: 1

Как можно использовать преобразование GroupByKey для создания такого типа группировки? (С несколькими ключами)

1 Ответ

0 голосов
/ 07 мая 2019

Похоже, записи, которые вы хотите объединить, имеют 3 ключа детали. Я представляю себе структуру, которая содержит:

  • a_id
  • b_id
  • c_id
  • имя
  • значение

Когда вы выполняете агрегирование ваших данных, мы агрегируем, конвертируя записи в пары ключ / значение (KV).

Это полностью зависит от вас, как вы решите составить свои ключи. Чтобы выполнить агрегацию по вашему желанию, может показаться, что мы можем создать ключ, состоящий из полей a_id, b_id и c_id. Подумайте об использовании ParDo или Mapper для преобразования ваших записей, чтобы иметь ключ "[a_id]:[b_id]:[c_id]" (или ваш собственный выбор уникальной структуры ключа, состоящей из желаемых полей).

...