优化pytables / HDF5的chunkshape参数以读取整列

时间:2012-09-18 20:01:33

标签: python hdf5 pytables

我正在尝试通过在创建表时指定chunkshape来提高我的pytables / HDF5代码的性能。我无法弄清楚chunkshape参数的实际尺寸或格式。我可以从代码中看到,它最终最终成为一个元素的元组。

这个单个元素应该是行数,字节数还是什么?

我的具体问题是我现有的代码可以创建一个包含20列的HDF5表。我想更改表的块,以便每列连续存储在磁盘上。因此,优化一次读出整列。

我尝试将chunkshape设置为20(列数),但这大大降低了读取整列的性能。是否应将块形状设置为单行的宽度(以字节为单位)?

如果出现以下问题,我想知道这应该是什么:

  1. 我想尽快读完整个专栏。
  2. 我确切知道表格中有多少列。
  3. 出于向后兼容的原因,我不能简单地将表更改为将现有行作为列,反之亦然。

1 个答案:

答案 0 :(得分:3)

chunkshape中的PyTables指定应该在磁盘上连续存储的每行和每列的元素数(这就是它为元组的原因)。

因此,例如,如果您的数据集是10,000 x 20(10,000行,20列)并且您始终一次访问一个列,那么每个块应包含尽可能多的列,给定最佳块大小(有关详细信息,请参阅here)。

如果你知道你将拥有多少行并且它们不是那么大,你可以指定一个(10.000,1)(或更少行)的块。因此,如果您访问所有20列,则需要进行20次访问。