gpt4 book ai didi

python - Pandas pytables 追加 : performance and increase in file size

转载 作者:行者123 更新时间:2023-11-28 16:38:30 25 4
gpt4 key购买 nike

我有 500 多个 PyTables 存储,每个存储包含大约 300Mb 的数据。我想将这些文件合并到一个大商店中,使用如下代码中的 pandas append

def merge_hdfs(file_list, merged_store):
for file in file_list:
store = HDFStore(file, mode='r')
merged_store.append('data', store.data)
store.close()

附加操作非常慢(将单个商店附加到 merged_store 最多需要 10 分钟),奇怪的是 merged_store 的文件大小似乎是每个附加商店增加 1Gb。

我已经指出了根据文档应该提高性能的预期行总数,并阅读了 Improve pandas (PyTables?) HDF5 table write performance我原以为写入时间会很长,但每 300Mb 将近 10 分钟似乎太慢了,而且我不明白为什么要增加大小。

我想知道我是否遗漏了什么?

有关其他信息,这里是对 500 个 PyTable 之一的描述。

/data/table (Table(272734,)) ''
description := {
"index": Int64Col(shape=(), dflt=0, pos=0),
"values_block_0": Float64Col(shape=(6,), dflt=0.0, pos=1),
"id": StringCol(itemsize=11, shape=(), dflt='', pos=2),
"datetaken": Int64Col(shape=(), dflt=0, pos=3),
"owner": StringCol(itemsize=15, shape=(), dflt='', pos=4),
"machine_tags": StringCol(itemsize=100, shape=(), dflt='', pos=5),
"title": StringCol(itemsize=200, shape=(), dflt='', pos=6),
"country": StringCol(itemsize=3, shape=(), dflt='', pos=7),
"place_id": StringCol(itemsize=18, shape=(), dflt='', pos=8),
"url_s": StringCol(itemsize=80, shape=(), dflt='', pos=9),
"url_o": StringCol(itemsize=80, shape=(), dflt='', pos=10),
"ownername": StringCol(itemsize=50, shape=(), dflt='', pos=11),
"tags": StringCol(itemsize=505, shape=(), dflt='', pos=12)}
byteorder := 'little'
chunkshape := (232,)

最佳答案

这基本上就是答案 here ,这是我最近回答的。

最重要的是,您需要关闭索引 store.append('df',df,index=False)。创建商店时,然后在最后对其进行索引。

此外,在合并表时也关闭压缩。

索引是一项相当昂贵的操作,如果我没记错的话,它只使用一个处理器。

最后,确保您创建了 merge with with mode='w',因为所有后续操作都是附加操作,您希望从一个干净的新文件开始。

我也不会预先指定 chunksize。相反,在创建最终索引后,使用 ptrepack 执行压缩并指定 chunksize=auto 它将为您计算。我认为这不会影响写入性能,但会优化查询性能。

您也可以尝试调整 chunksize 参数以将 append(这是写入 chunksize)也设为更大的数字。

显然要确保每个附加表都具有完全相同的结构(如果不是这种情况将引发)。

我创建这个问题是为了增强“内部”执行此操作:https://github.com/pydata/pandas/issues/6837

关于python - Pandas pytables 追加 : performance and increase in file size,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22934996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com