使用 dask.DataFrame.to_parquet() 写入大文件

Using dask.DataFrame.to_parquet() to write large file

我有一个 .pq 文件(大约 2Gb),我想在其中使用 dask 更改列名。

我可以毫无问题地将文件读取到 dask DataFrame,而且我能够重命名列。 但是当使用 ddf.to_parquet() 将 .pq 文件写回磁盘时,作业失败了,因为 dask 似乎试图将它放入内存(但它不适合)。

为什么会这样?我预计 dask 会迭代地执行此操作。如何分块写入目标文件?

下面是我正在使用的代码。

import dask.dataframe as dd

ddf = dd.read_parquet(
    '/path/to/file/file.pq',
    engine='pyarrow'
)

ddf = ddf.rename(columns={'old_column_name': 'new_column_name'})

# the step which fails
ddf.to_parquet(
    '/path/to/file/edited/',
    engine='pyarrow',
    write_index=False
)

提前致谢!

Dask 确实以块的形式加载您的数据,并将它们以块的形式写入输出。总内存使用量将取决于

  • 每个块的大小,在 parquet 中称为“行组”,它们是不可分割的。你需要内存中的大小,解压解码后
  • 您一次处理的块数,如果您不另外配置,这可能是您CPU中的核心数

请注意,在处理过程中还需要一些中间值,因此您通常希望每个 worker 的每个线程能够满足神的交易,而不仅仅是一个块的价值数据.