加载速度更快:python 中的 pickle 或 hdf5

which is faster for load: pickle or hdf5 in python

给定 pandas 数据帧的 1.5 Gb 列表,哪种格式加载压缩数据最快: pickle(通过 cPickle)、hdf5 或 Python?

中的其他内容

更新: 现在我会在 Parquet、Feather (Apache Arrow)、HDF5 和 Pickle 之间做出选择。

赞成者和反对者:

  • 实木复合地板
    • 优点
      • 最快和广泛支持的二进制存储格式之一
      • 支持非常快的压缩方法(例如 Snappy 编解码器)
      • 数据湖/大数据的实际标准存储格式
    • 对比
      • 必须将整个数据集读入内存。您无法阅读较小的子集。解决此问题的一种方法是使用 partitioning 并只读取所需的分区。
        • 不支持索引。您无法读取特定行或一系列行 - 您总是必须读取整个 Parquet 文件
      • Parquet 文件是不可变的 - 您不能更改它们(无法追加、更新、删除),只能写入或覆盖到 Parquet 文件。嗯,这个“限制”来自大数据,将被视为那里的巨大“优点”之一。
  • HDF5
    • 优点
      • 支持数据切片 - 能够读取整个数据集的一部分(我们可以处理不能完全放入 RAM 的数据集)。
      • 比较快二进制存储格式
      • 支持压缩(尽管与 Snappy 编解码器 (Parquet) 相比压缩速度较慢)
      • 支持附加行(可变)
    • 对比
  • 泡菜
    • 优点
      • 非常快
    • 对比
      • 需要很多 space 磁盘
      • 对于长期存储,可能会遇到兼容性问题。您可能需要指定 Pickle 版本以读取旧的 Pickle 文件。

旧答案:

我只会考虑两种存储格式:HDF5 (PyTables) 和 Feather

这是我的 DF 的结果(形状:4000000 x 6,内存大小 183.1 MB,未压缩 CSV 的大小 - 492 MB)。

以下存储格式的比较:(CSV, CSV.gzip, Pickle, HDF5 [各种压缩]):

                  read_s  write_s  size_ratio_to_CSV
storage
CSV               17.900    69.00              1.000
CSV.gzip          18.900   186.00              0.047
Pickle             0.173     1.77              0.374
HDF_fixed          0.196     2.03              0.435
HDF_tab            0.230     2.60              0.437
HDF_tab_zlib_c5    0.845     5.44              0.035
HDF_tab_zlib_c9    0.860     5.95              0.035
HDF_tab_bzip2_c5   2.500    36.50              0.011
HDF_tab_bzip2_c9   2.500    36.50              0.011

但你可能不一样,因为我所有的数据都是 datetime dtype,所以最好与 你的 真实数据进行比较或至少具有相似的数据...