为了快速读写性能,HDF5推荐使用什么压缩方式(在Pythonpandas中)?

问题描述 投票:11回答:1

我曾多次读到,在HDF5中开启压缩可以带来更好的读写性能。

我想知道理想的设置可以在什么情况下达到良好的读写性能。

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

我已经在使用 fixed 格式(即 h5py),因为它比 table. 我的处理器很强,对磁盘空间不是很在意。

我经常存储 DataFramefloat64str 类型的文件,大约2500行x9000列。

pandas compression hdf5 hpc h5py
1个回答
17
投票

有几种可能的压缩过滤器,你可以使用。由于 HDF5 1.8.11版本 你可以很容易地注册一个第三方的压缩过滤器。

关于性能。

这可能取决于你的访问模式,因为你可能想为你的chunks定义适当的尺寸,以便它与你的访问模式保持一致,否则你的性能会受到很大影响(例如,如果你知道你通常访问一列和所有行,你应该相应地定义你的chunks形状)。(1,9000)). 见 此处, 此处此处 的一些信息。

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

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

关于你最初的问题。

我建议你看看 布罗斯克. 它是一个多线程的元压缩库,支持各种不同的压缩过滤器。

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

这些都有不同的优势,最好的办法是尝试用你的数据对它们进行基准测试,看看哪个最有效。

© www.soinside.com 2019 - 2024. All rights reserved.