Заставить dask to_parquet написать один файл - PullRequest
0 голосов
/ 08 апреля 2020

При использовании dask.to_parquet(df, filename) создается подпапка filename, и несколько файлов записываются в эту папку, тогда как pandas.to_parquet(df, filename) записывает ровно один файл. Могу ли я использовать dask's to_parquet (без использования compute() для создания pandas df), чтобы просто написать один файл?

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

Запись в один файл очень сложна в системе параллелизма. Извините, такой вариант не предлагает Dask (и, вероятно, любая другая библиотека параллельной обработки).

Теоретически вы можете выполнить операцию с нетривиальным объемом работы с вашей стороны: вам нужно будет выполнить итерацию через разделы вашего фрейма данных запишите в целевой файл (который вы оставляете открытым) и скопируйте выходные группы строк в окончательный нижний колонтитул метаданных файла. Я бы знал, как go об этом с fastparquet, но эта библиотека уже не так сильно развивается.

0 голосов
/ 08 апреля 2020

Есть причины иметь несколько файлов (в частности, когда один большой файл не помещается в памяти), но если вам действительно нужен только 1, вы можете попробовать это

import dask.dataframe as dd
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(1_000,5))

df = dd.from_pandas(df, npartitions=4)
df.repartition(npartitions=1).to_parquet("data")
...