对于快速 read/write 性能(在 Python/pandas 中),HDF5 的推荐压缩是什么?

What is the recommended compression for HDF5 for fast read/write performance (in Python/pandas)?

我读过好几遍,在 HDF5 中打开压缩可以带来更好的 read/write 性能。

我想知道什么样的理想设置可以在以下位置实现良好的 read/write 性能:

 data_df.to_hdf(..., format='fixed', complib=..., complevel=..., chunksize=...)

我已经在使用 fixed 格式(即 h5py),因为它比 table 快。我有强大的处理器,不太关心磁盘 space。

我经常将 float64str 类型的 DataFrame 存储在大约 . 2500 行 x 9000 列。

您可以使用几个可能的压缩过滤器。 由于 HDF5 version 1.8.11 您可以轻松注册第 3 方压缩过滤器。

关于性能:

这可能取决于您的访问模式,因为您可能想为您的块定义适当的维度,以便它与您的访问模式保持一致,否则您的性能将受到很大影响。例如,如果你知道你通常访问一列和所有行,你应该相应地定义你的块形状 (1,9000)。有关一些信息,请参阅 here, here and here

但是 AFAIK pandas 通常最终会将整个 HDF5 文件加载到内存中,除非您使用 read_tableiterator(参见 here) or do the partial IO yourself (see here),因此不会'定义一个好的块大小并没有那么大的好处。

尽管如此,您仍然可以从压缩中获益,因为将压缩数据加载到内存并使用 CPU 对其进行解压缩可能比加载未压缩数据更快。

关于你原来的问题:

我建议看一下 Blosc。它是一个多线程元压缩器库,支持各种不同的压缩过滤器:

  • BloscLZ:内部默认压缩器,主要基于 FastLZ。
  • LZ4:一款紧凑、非常流行且快速的压缩器。
  • LZ4HC:LZ4 的调整版本,以牺牲速度为代价产生更好的压缩比。
  • Snappy:一种在许多地方使用的流行压缩器。
  • Zlib:经典;比以前的慢一些,但压缩率更高。

它们各有优势,最好的办法是尝试用您的数据对它们进行基准测试,看看哪个效果最好。