强制 dask to_parquet 写入单个文件

Force dask to_parquet to write single file

当使用 dask.to_parquet(df, filename) 时,会创建一个子文件夹 filename 并将多个文件写入该文件夹,而 pandas.to_parquet(df, filename) 只会写入一个文件。 我可以使用 dask 的 to_parquet(不使用 compute() 创建 pandas df)只写一个文件吗?

有多个文件是有原因的(特别是当一个大文件不适合内存时)但如果你真的只需要 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")

在并行系统中写入单个文件非常困难。抱歉,Dask 不提供这样的选项(也可能是任何其他并行处理库)。

理论上,您可以通过大量的工作来执行该操作:您需要遍历数据帧的分区,写入目标文件(您保持打开状态)并累积将行组输出到文件的最终元数据页脚中。我会知道如何使用 fastparquet 来解决这个问题,但是那个库已经不再开发了。