Написание файла Parquet из нескольких процессов Python с использованием Dask

Возможно ли в Python записать одну и ту же папку Parquet из разных процессов?

Я использую fastparquet.

Кажется, это работает, но мне интересно, как это возможно, чтобы файл _metadata не имел конфликтов, если два процесса записывают в него одно и то же.

Также, чтобы заставить его работать, мне пришлось использовать ignore_divisions=True, что не идеально, чтобы получить высокую производительность позже, когда вы читаете файл Parquet, верно?


person hadim    schedule 23.11.2019    source источник


Ответы (1)


Dask объединяет метаданные из отдельных процессов, так что он записывает файл _metadata только после завершения остальных, и это происходит в одном потоке.

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

person mdurant    schedule 23.11.2019
comment
Спасибо! Как бы вы создали файл метаданных после записи всех файлов данных? - person hadim; 23.11.2019
comment
Или, может быть, более эффективно создать пустой фрейм данных dask и использовать map_fn для его заполнения? Но как тогда контролировать запись на диск? - person hadim; 23.11.2019
comment
Нет ни одной функции, но вы бы начали с fastparquet.util.metadata_from_many - person mdurant; 24.11.2019