我已多次阅读过在HDF5中开启压缩可以带来更好的读/写性能。
我想知道理想设置可以在以下方面实现良好的读/写性能:
data_df.to_hdf(..., format='fixed', complib=..., complevel=..., chunksize=...)
我已经使用fixed
格式(即h5py
),因为它比table
更快。我有强大的处理器,并不关心磁盘空间。
我经常将DataFrame
和float64
类型的str
存储在大约的文件中。 2500行×9000列。
答案 0 :(得分:14)
您可以使用几种可能的压缩过滤器。 自HDF5 version 1.8.11起,您就可以轻松注册第三方压缩过滤器。
这可能取决于您的访问模式,因为您可能希望为您的块定义适当的尺寸,以便它与您的访问模式很好地对齐,否则您的性能将受到很大影响(例如,如果您知道您通常访问一个列你应该相应地定义你的块形状的所有行(1,9000)
)。有关某些信息,请参阅here,here和here。
然而,除非您使用read_table
和iterator
(请参阅here)或自行执行部分IO,否则AFAIK pandas通常会将整个HDF5文件加载到内存中(请参阅{{ 3}})因此并没有真正受益于定义一个好的块大小。
尽管如此,您仍然可以从压缩中受益,因为将压缩数据加载到内存并使用CPU解压缩它可能比加载未压缩数据更快。
我建议您查看here。它是一个多线程元压缩器库,支持各种不同的压缩过滤器:
它们具有不同的优势,最好的方法是尝试使用您的数据对它们进行基准测试,看看哪种方法效果最好。