使用 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 文件的主要内容,如果未能解决你的问题,请参考以下文章