如何降低HDFStore的大小开销?

2024-05-29 02:59:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在试验不同的适合熊猫的蜱虫数据存储方案。到目前为止,最快的(在读写方面)是使用带有blosc压缩和“固定”格式的HDFStore。在

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

我用股票代码索引,因为这是我常用的访问模式。然而,这个方案为每个符号增加大约1MB的空间。也就是说,如果microcap股票的数据帧只包含当天的1000个滴答声,那么文件的大小将增加一兆字节。因此,对于一个小股票的大宇宙,.h5文件很快变得难以处理。在

有没有一种方法既能保持blosc/固定格式的性能优势,又能减小大小?我尝试过“table”格式,每个符号大约需要285kb。在

^{pr2}$

但是,这种格式的读写速度要慢得多。在

如果有帮助的话,我的数据框如下所示:

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中每个节点的大小惩罚。在


Tags: 文件数据store字节object格式方案符号
1条回答
网友
1楼 · 发布于 2024-05-29 02:59:58

在PyTables中,块大小有一定的最小值。在

以下是一些建议:

  • 您可以使用选项ptrepack该文件。这将使用chunkshape对其进行打包,该chunkshape是通过查看所有数据来计算的,并且可以将数据重新打包为更有效的块大小,从而使文件大小更小。原因是PyTables需要知道最终数组/表大小的预期行数。

  • 您可以通过传递expectedrows=(并且只执行一次追加)来实现Table格式的最佳chunksize。但是,ptrepacking在这里仍然有好处。

  • 您也可以尝试以表格式写入,而不是设置所有data_columns=True,只需传递format='table';它将写入表格式(但除了按索引之外,您将无法查询);但它存储为单个块,因此它的速度应该与固定的一样快(但空间效率更高)

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

相关问题 更多 >

    热门问题