使用 Dask 从多个 Python 进程编写 Parquet 文件

Posted

技术标签:

【中文标题】使用 Dask 从多个 Python 进程编写 Parquet 文件【英文标题】:Writing a Parquet file from multiple Python processes using Dask 【发布时间】:2020-03-19 10:50:00 【问题描述】:

是否可以在 Python 中从不同进程编写相同的 Parquet 文件夹?

我使用fastparquet

它似乎有效,但我想知道_metadata 文件如何在两个进程同时写入它的情况下不发生冲突。

为了使其正常工作,我必须使用ignore_divisions=True,这对于稍后在读取 Parquet 文件时获得快速性能并不理想,对吧?

【问题讨论】:

【参考方案1】:

Dask 整合了来自不同进程的元数据,因此它只在其余部分完成后才写入 _metadata 文件,这发生在单个线程中。

如果您使用自己的多处理设置将单独的 parquet 文件写入单个文件夹,则每个文件通常都会写入单个数据文件,而根本不会写入 _metadata。您可以像 Dask 那样收集片段,也可以在数据文件准备好后整合元数据。

【讨论】:

谢谢!写完所有数据文件后如何创建元数据文件? 或者创建一个空的 dask 数据框并使用 map_fn 填充它可能更有效?但是那我如何控制磁盘上的写入呢? 没有单一功能,但您可以从 fastparquet.util.metadata_from_many 开始

以上是关于使用 Dask 从多个 Python 进程编写 Parquet 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 dask/fastparquet 从多个目录中读取多个 parquet 文件(具有相同架构)

Dask:定期更新已发布的数据集并从其他客户端提取数据

Python 中处理大型数据工具(dask)

python dask to_parquet 占用大量内存

与 Dask 共享内存

Dask Worker 进程内存不断增长