Как вы разделяете PCollections по некоторому критерию? - PullRequest
0 голосов
/ 16 мая 2019

Как вы разделяете PCollection по некоторым оценкам?

Допустим, у меня есть:

  messages = (gcp | beam.io.ReadFromPubSub(topic=None, subscription=SUBSCRIPTION, with_attributes=True))

Теперь я хочу разделить сообщения на две PC-коллекции:

  split = messages | beam.Split(function())

split - это массив PCollections, разделенных на то, что определено в моей функции.

Я не могу найти ничего, что делает это, кроме разбиения, но, похоже, просто разбивает его на сегменты произвольно, без какой-либо функции для определения того, что и куда.

1 Ответ

1 голос
/ 16 мая 2019

Я думаю, что раздел действительно то, что вы хотите. Если мы посмотрим на документированную функцию Разделения, близкую к Core Beam Transforms (4.2.6), мы обнаружим, что преобразование принимает в качестве входных данных:

  • Функция для определения, в какой раздел должен быть помещен элемент в PCollection.
  • Количество используемых разделов.

Функция вызывается один раз для каждого из элементов в PCollection и возвращает числовой индекс, в какой из разделов поместить этот элемент. Например, если у вас есть две возможности вывода, то количество разделов, которое вы хотите, будет равно двум. Ваша функция будет вызываться для каждого элемента, а выражение оценивается для каждого элемента. Если выражение истинно, верните 0, чтобы поместить этот элемент в первый раздел, если выражение ложно, верните 1, чтобы поместить этот элемент во второй раздел. Теперь вы разделили свою PCollection на два отдельных раздела, управляемых природой логики вашей функции.

...