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

Mar*_*ath 11 compression hpc hdf5 h5py pandas

我已多次阅读过在HDF5中打开压缩可以带来更好的读/写性能.

我想知道什么样的理想设置可以在以下方面实现良好的读/写性能:

 data_df.to_hdf(..., format='fixed', complib=..., complevel=..., chunksize=...)
Run Code Online (Sandbox Code Playgroud)

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

我经常存储DataFramefloat64str类型的约文件.2500行×9000列.

Ümi*_*mit 15

您可以使用几种可能的压缩过滤器.从HDF5版本1.8.11开始,您可以轻松注册第三方压缩过滤器.

关于表现:

它可能取决于您的访问模式,因为您可能希望为块定义适当的维度,以便它与您的访问模式良好对齐,否则您的性能将受到很大影响(例如,如果您知道通常访问一列和所有行你应该相应地定义你的块形状(1,9000)).一些信息,请参见此处,此处此处.

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

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

关于你原来的问题:

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

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

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