gpt4 book ai didi

python - 如何减少 HDFStore 的大小开销?

转载 作者:太空宇宙 更新时间:2023-11-04 01:20:25 27 4
gpt4 key购买 nike

我正在试验不同的 pandas 友好存储方案来存储报价数据。迄今为止最快的(就读取和写入而言)是使用具有 blosc 压缩和“固定”格式的 HDFStore。

store = pd.HDFStore(path, complevel=9, complib='blosc')
store.put(symbol, df)
store.close()

我通过股票代码进行索引,因为这是我的常用访问模式。但是,此方案每个符号 增加了大约 1 MB 的空间。也就是说,如果微型市值股票的数据框仅包含当天的一千个报价点,则文件的大小将增加一兆字节。因此,对于大量小型股票而言,.h5 文件很快就会变得笨拙。

有没有办法在保持 blosc/fixed 格式的性能优势的同时减小尺寸?我试过“表格”格式,每个符号大约需要 285 KB。

store.append(symbol, df, data_columns=True)

但是,这种格式的读写速度非常慢。

如果有帮助,这是我的数据框的样子:

exchtime     datetime64[ns]
localtime datetime64[ns]
symbol object
country int64
exch object
currency int64
indicator int64
bid float64
bidsize int64
bidexch object
ask float64
asksize int64
askexch object

blosc 压缩本身效果很好,因为生成的 .h5 文件每行仅需要 30--35 字节。所以现在我主要关心的是减少 HDFStore 中每个节点的大小损失。

最佳答案

据我所知,PyTables 中的 block 大小有一定的最小值。

这里有一些建议:

  • 您可以使用选项 chunkshape='auto' ptrepack 文件。这将使用通过查看所有数据计算得出的 block 形状来打包它,并且可以以更有效的 block 大小重新打包数据,从而产生更小的文件大小。原因是 PyTables 需要被告知最终数组/表大小的预期行数。

  • 您可以通过传递 expectedrows=(并且仅执行一次追加)在 Table 格式中实现最佳 block 大小。但是,ptrepacking 在这里仍然有优势。

  • 你也可以试试用Table格式写,不用设置所有的data_columns=True,只传format='table';它将写入表格格式(但您将无法通过索引进行查询);但它存储为单个 block ,因此几乎与固定的一样快(但空间效率更高)

  • 在 PyTables 3.1(刚刚发布)中,有一个新的 blosc 过滤器。这可能会减少文件大小。参见 here

关于python - 如何减少 HDFStore 的大小开销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21635224/

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