Python 在分区数据集上使用Dask时_元数据文件的重要性
我有一个简单的理解,关于拼花地板数据集中文件的信息可以放在Python 在分区数据集上使用Dask时_元数据文件的重要性,python,dask,Python,Dask,我有一个简单的理解,关于拼花地板数据集中文件的信息可以放在\u元数据文件中,并用于。然而,当我使用Dask到带有append=True和write\u metadata\u file=True的拼花地板时遇到性能问题,下面是我的完整命令。(我还没有完全理解发生了什么,但我的记忆会突然增强,就在to_拼花地板被分给工人之前)。一、 因此,决定设置write\u metadata\u file=False,并在没有\u metadata文件的情况下继续,删除先前创建的\u metadata文件 我发
\u元数据
文件中,并用于。然而,当我使用Dask到带有append=True
和write\u metadata\u file=True
的拼花地板时遇到性能问题,下面是我的完整命令。(我还没有完全理解发生了什么,但我的记忆会突然增强,就在to_拼花地板
被分给工人之前)。一、 因此,决定设置write\u metadata\u file=False
,并在没有\u metadata
文件的情况下继续,删除先前创建的\u metadata
文件
我发现问题消失了,而且到_parquet
的速度也不慢,如果说我节省了时间的话,那就是每次都不必编写\u元数据
文件
此外,当我读取_parquet
文件时,如果没有\u元数据
文件,也不会像我预期的那样导致性能不佳
我选择在追加时进行分区,不知道这是不是\u元数据
文件不那么重要的原因,还是不正确?当元数据
文件很重要而不是很重要时,是否存在明显的情况
代码的简单示例
dd.to_parquet(df,
engine='fastparquet',
path=uri, storage_options=dl.storage_options,
partition_on=['A', 'B', 'C'],
append=True,
ignore_divisions=True,
write_metadata_file=False)
元数据文件提供了三个可能有用的功能:
- 所有组成分区的文件名
- 列块的每个文件中的偏移量
- 每个列块中值的最小/最大统计信息
- 数据集的模式可以从_common_元数据文件或任何一个数据文件中读取
最后,为了完整性:为什么带元数据的分区追加速度慢?每次追加时都必须重写单个元数据文件,它首先需要从每个任务中获取所有元数据。我还需要在内存中保存所有元数据。这可能做得更好,但这是当前的实现。感谢您的快速响应,我感觉在进行统计时,元数据文件真的有了自己的功能。考虑到我不是,并且在当前的实现中,当附加拼花地板是很慢的时候,我认为没有元数据文件的代价是存在的。