我曾多次读到,在HDF5中开启压缩可以带来更好的读写性能。
我想知道理想的设置可以在什么情况下达到良好的读写性能。
data_df.to_hdf(..., format='fixed', complib=..., complevel=..., chunksize=...)
我已经在使用 fixed
格式(即 h5py
),因为它比 table
. 我的处理器很强,对磁盘空间不是很在意。
我经常存储 DataFrame
的 float64
和 str
类型的文件,大约2500行x9000列。
有几种可能的压缩过滤器,你可以使用。由于 HDF5 1.8.11版本 你可以很容易地注册一个第三方的压缩过滤器。
这可能取决于你的访问模式,因为你可能想为你的chunks定义适当的尺寸,以便它与你的访问模式保持一致,否则你的性能会受到很大影响(例如,如果你知道你通常访问一列和所有行,你应该相应地定义你的chunks形状)。(1,9000)
). 见 此处, 此处 和 此处 的一些信息。
然而AFAIK pandas通常会将整个HDF5文件加载到内存中,除非你使用了 read_table
和一个 iterator
(见 此处)或自己做部分IO(见 此处),因此并没有真正受益于定义一个好的分块大小。
尽管如此,你仍然可能从压缩中获益,因为将压缩数据加载到内存中,然后用CPU解压,可能比加载未压缩的数据更快。
我建议你看看 布罗斯克. 它是一个多线程的元压缩库,支持各种不同的压缩过滤器。
这些都有不同的优势,最好的办法是尝试用你的数据对它们进行基准测试,看看哪个最有效。