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

Python 使用dask.DataFrame.to_parquet()编写大文件,python,pandas,dask,parquet,Python,Pandas,Dask,Parquet,我有一个.pq文件(大约2Gb),我想在其中使用dask更改列名 我在将文件读取到dask数据帧时没有问题,而且我能够重命名列。 但是当使用ddf.to_parquet()将.pq文件写回磁盘时,任务失败了,因为dask似乎试图将其放入内存中(但它不适合) 为什么会发生这种情况?我希望dask会迭代地这样做。如何将目标文件分块写入 下面是我正在使用的代码 import dask.dataframe as dd ddf = dd.read_parquet( '/path/to/file/

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

我在将文件读取到dask数据帧时没有问题,而且我能够重命名列。 但是当使用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确实以块的形式加载数据,并将它们以块的形式写入输出。总内存使用量将取决于

  • 每一块的大小,在拼花地板中称为“行组”,是不可分割的。解压和解码后,需要内存中的大小
  • 一次处理的块数,如果不进行其他配置,可能是CPU中的核心数

请注意,在处理过程中还需要一些中间值,因此您通常希望每个工作线程都能够容纳比一个数据块更大的数据量。

会出现什么错误?它不会读取实际数据,直到您对拼花地板执行
。这就是为什么它只有在与内存相关的最后一步才会失败。尝试更改read_拼花地板的chunksize参数。我想知道是否有一个为什么在不阅读整个内容的情况下更改磁盘上的列名…不,没有方便的方法来更改列名。使用字节编辑,您可以对与原始名称长度相同的名称进行编辑。