我读过几次在HDF5中打开压缩可以导致更好的读写性能。
我想知道理想的设置可以达到良好的读写性能:
data_df.to_hdf(..., format='fixed', complib=..., complevel=..., chunksize=...)
我已经使用fixed
格式(即h5py
),因为它比table
更快。我有强大的处理器,不太关心磁盘空间。
我经常将float64
和str
类型的DataFrame
s存储在大约为。2500行x 9000列。
您可以使用几种可能的压缩过滤器。从HDF5 1.8.11版本开始,你可以很容易地注册第三方压缩过滤器。
关于性能:这可能取决于您的访问模式,因为您可能希望为您的块定义适当的维度,以便它与您的访问模式保持一致,否则您的性能将受到很大影响。例如,如果您知道您通常访问一列和所有行,那么您应该相应地定义块形状(1,9000)
。请看这里,这里和这里的一些信息。
然而,AFAIK pandas通常会将整个HDF5文件加载到内存中,除非你使用read_table
和iterator
(见这里)或自己做部分IO(见这里),因此并没有真正受益于定义一个好的块大小。
尽管如此,您仍然可以从压缩中获益,因为将压缩数据加载到内存并使用CPU解压缩它可能比加载未压缩的数据更快。
关于你最初的问题:
我建议你看一下《花儿》。它是一个多线程的元压缩器库,支持各种不同的压缩过滤器:
- blossom:内部默认压缩器,主要基于FastLZ。
- LZ4:一个紧凑,非常流行和快速的压缩机。
- LZ4HC: LZ4的调整版本,以牺牲速度为代价产生更好的压缩比。
- Snappy:在许多地方使用的流行压缩机。
- Zlib:经典;比之前的稍微慢一些,但实现了更好的压缩比。
它们有不同的优势,最好的方法是尝试用你的数据对它们进行基准测试,看看哪种效果最好。