Напишите вывод непосредственно от работника Dask - PullRequest
0 голосов
/ 27 марта 2019

У меня есть конвейер, который преобразует (отображает) кадр данных.Вывод большой - строки во входном фрейме данных содержат аудио в двоичном формате, а строки в выходном фрейме данных содержат извлеченные двоичные функции.

Я читаю ввод из файла секционированного паркета и записываю его обратно в другой файл.паркетный файл (файлы) - оба на общем сетевом ресурсе.

Насколько я понимаю, в распределенном dask каждый работник отправит выходные данные обратно в планировщик (а затем, возможно, планировщик отправит их обратно клиенту ??) и только тогда планировщик (или клиент) запишет его в общий сетевой ресурс.Это правильно?

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

1 Ответ

1 голос
/ 27 марта 2019

Ваше понимание неверно: работники будут читать и писать напрямую в общие хранилища или облачные / сетевые службы, это нормальный способ расчета.

df = dd.read_parquet(url)
df_out = do_work(df)
df_out.to_parquet(url2)

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

При желании вы можете перенести весь набор данных в память клиента в виде кадра данных pandas с

local_df = df.compute()

но это необязательно и, очевидно, не рекомендуется, если размер данных больше, чем объем памяти. Обычно вам никогда не нужно делать это для всего набора данных, возможно, только для некоторого совокупного результата, намного меньшего, чем исходный. Даже в этом случае сам планировщик не сохраняет результаты.

...