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

标签 pandas compression hdf5 hpc h5py

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

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

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

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

我经常存储DataFrame float64的s和 str键入大约的文件。 2500 行 x 9000 列。

最佳答案

您可以使用几种可能的压缩过滤器。
HDF5 version 1.8.11您可以轻松注册第 3 方压缩过滤器。
关于性能:
这可能取决于您的访问模式,因为您可能希望为块定义适当的维度,以便它与您的访问模式很好地对齐,否则您的性能会受到很大影响。例如,如果您知道通常访问一列和所有行,则应相应地定义块形状 (1,9000) .见 here , herehere一些信息。
但是,除非您使用 read_table,否则 AFAIK Pandas 通常最终会将整个 HDF5 文件加载到内存中。和一个 iterator (请参阅 here )或自己执行部分 IO(请参阅 here ),因此定义好的块大小并没有真正受益。
尽管如此,您仍然可以从压缩中受益,因为将压缩数据加载到内存并使用 CPU 解压缩它可能比加载未压缩数据更快。
关于你原来的问题:
我建议看看 Blosc .它是一个多线程元压缩库,支持各种不同的压缩过滤器:

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

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

    关于pandas - 为实现快速读/写性能(在 Python/pandas 中),推荐的 HDF5 压缩是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31383122/

    相关文章:

    python - pandas chained_assignment 警告异常处理

    python - 与日期时间索引上的日期/时间进行区间比较(检查一个小时是否在两个时间段之间)

    python - Pandas 和 HDF5 中的文件大小减小

    Java Deflater,现在和将来的结果相同(确定性)

    AWK处理压缩文件并打印原始(压缩)文件名

    python - 使用 Pandas 和 HD5/HDFStore 进行压缩

    python - Pandas 和 h5py 以不同方式加载相同数据(ndarray)

    python - 将多索引与多个列级别和数据框合并

    python - 使用 pandas 循环遍历 .xlsx 文件,仅执行第一个文件

    java - 使用 java 提取 zip 文件的最佳方法是什么