什么是推荐的压缩HDF5快速读/写性能(在Python/pandas)



我读过几次在HDF5中打开压缩可以导致更好的读写性能。

我想知道理想的设置可以达到良好的读写性能:

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

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

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

您可以使用几种可能的压缩过滤器。从HDF5 1.8.11版本开始,你可以很容易地注册第三方压缩过滤器。

关于性能:

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

然而,AFAIK pandas通常会将整个HDF5文件加载到内存中,除非你使用read_tableiterator(见这里)或自己做部分IO(见这里),因此并没有真正受益于定义一个好的块大小。

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

关于你最初的问题:

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

  • blossom:内部默认压缩器,主要基于FastLZ。
  • LZ4:一个紧凑,非常流行和快速的压缩机。
  • LZ4HC: LZ4的调整版本,以牺牲速度为代价产生更好的压缩比。
  • Snappy:在许多地方使用的流行压缩机。
  • Zlib:经典;比之前的稍微慢一些,但实现了更好的压缩比。

它们有不同的优势,最好的方法是尝试用你的数据对它们进行基准测试,看看哪种效果最好。

最新更新