Apache Beam - как разбить PCollection на 2 по ключу в Python - PullRequest
0 голосов
/ 06 декабря 2018

Предположим, у нас есть 2 PCollections:

PCollection 1:

[<ID_1, some_data>, <ID_2, some_data>, ... <ID_5, some_data>]

PCollection 2:

[<ID_2>, <ID_5>]

Оба PCollections ограничены, но могут быть огромными (поэтомупредпочитаю не вводить на стороне).

Скажем, мы хотим разделить PCollection1 на 2, решив, существует ли ID_x в PCollection 2, то есть один PCollection будет иметь [<ID_1, some_data>, <ID_3, some_data>, <ID_4, some_data>], а другой [<ID_2, some_data>, <ID_5, some_data>].Как этого добиться?

Кажется, что преобразование Partition - это путь, но я не могу понять, как.

Но, кстати, я использую Python.

1 Ответ

0 голосов
/ 06 декабря 2018

Partition позволит вам фактически разделить одну PCollection на несколько, основываясь на критериях, которые вы сможете рассчитать во время выполнения, поэтому теоретически это можно использовать для этого.Но в вашем случае критерием является "ID существует в pcollection_of_ids".Таким образом, вы должны быть в состоянии выполнить эту проверку более или менее эффективно.

Я не верю, что есть какое-то однозначное решение, это зависит от особенностей вашей установки и данных.Например, насколько велик вход PCollections?Или что, если вы получили элемент в pcollection1, хотя в pcollection_of_ids не было соответствующего идентификатора, но соответствующий идентификатор появился там после того, как вы уже разбили вход?Или, вы можете предварительно загрузить свои идентификаторы в какой-либо сервис для эффективного поиска ключа / значения?Или сохранить его в таком сервисе в отдельном параллельном конвейере, пока приходят идентификаторы?

...