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

时间:2015-07-13 12:13:26

标签: pandas compression hdf5 hpc h5py

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

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

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

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

我经常将DataFramefloat64类型的str存储在大约的文件中。 2500行×9000列。

1 个答案:

答案 0 :(得分:14)

您可以使用几种可能的压缩过滤器。 自HDF5 version 1.8.11起,您就可以轻松注册第三方压缩过滤器。

关于表现:

这可能取决于您的访问模式,因为您可能希望为您的块定义适当的尺寸,以便它与您的访问模式很好地对齐,否则您的性能将受到很大影响(例如,如果您知道您通常访问一个列你应该相应地定义你的块形状的所有行(1,9000))。有关某些信息,请参阅hereherehere

然而,除非您使用read_tableiterator(请参阅here)或自行执行部分IO,否则AFAIK pandas通常会将整个HDF5文件加载到内存中(请参阅{{ 3}})因此并没有真正受益于定义一个好的块大小。

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

关于你原来的问题:

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

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

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