Когда будет выполняться ленивое выполнение ParDo в Apache Beam Python?Python

Программы на Python
Ответить
Anonymous
 Когда будет выполняться ленивое выполнение ParDo в Apache Beam Python?

Сообщение Anonymous »

Мне интересно, когда будет оцениваться значение генератора при работе в лучевом конвейере и как в этом случае будут работать распределенные вычисления, поскольку в документации ParDos об этом не упоминается.
Цель состоит в том, чтобы ParDo лениво загружал все имена файлов в моей корзине, а затем загружал и обрабатывал их на максимальном количестве рабочих процессов в do_something_with_df.
Учитывая следующее код фрагмент:

Код: Выделить всё

import apache_beam as beam

class AcquireCsvs(beam.DoFn):

def process(self, element: None) -> Iterable[pd.Dataframe]:
files = beam.io.GcsIO().list_files("some location")
for file in files:
yield self._load_file(file)

def _load_file(self, filename) -> pd.Dataframe:
with beam.io.GcsIO().open(filename) as file:
return pd.read_csv(file)

with beam.Pipeline() as p:
(
p
| beam.Create([None])
| beam.ParDo(AcquireCsvs())
| beam.Map(do_something_with_df)
)

когда метод _load_file будет выполняться для каждого файла? Будет ли это в функции do_something_with_df так, как мне хотелось бы? Или все они будут оценены уже как часть ParDo и, следовательно, заблокируют весь мой конвейер на одном и том же начальном рабочем элементе?
Спасибо за любые подсказки, которые вы можете предоставить!

Подробнее здесь: https://stackoverflow.com/questions/792 ... e-executed
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»