加载速度更快: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,所以最好与 你的 真实数据进行比较或至少具有相似的数据...
给定 pandas 数据帧的 1.5 Gb 列表,哪种格式加载压缩数据最快: pickle(通过 cPickle)、hdf5 或 Python?
中的其他内容- 我只关心加载数据到内存的最快速度
- 我不关心转储数据,它很慢,但我只转储一次。
- 我不关心磁盘上的文件大小
更新: 现在我会在 Parquet、Feather (Apache Arrow)、HDF5 和 Pickle 之间做出选择。
赞成者和反对者:
- 实木复合地板
- 优点
- 最快和广泛支持的二进制存储格式之一
- 支持非常快的压缩方法(例如 Snappy 编解码器)
- 数据湖/大数据的实际标准存储格式
- 对比
- 必须将整个数据集读入内存。您无法阅读较小的子集。解决此问题的一种方法是使用 partitioning 并只读取所需的分区。
- 不支持索引。您无法读取特定行或一系列行 - 您总是必须读取整个 Parquet 文件
- Parquet 文件是不可变的 - 您不能更改它们(无法追加、更新、删除),只能写入或覆盖到 Parquet 文件。嗯,这个“限制”来自大数据,将被视为那里的巨大“优点”之一。
- 必须将整个数据集读入内存。您无法阅读较小的子集。解决此问题的一种方法是使用 partitioning 并只读取所需的分区。
- 优点
- HDF5
- 优点
- 支持数据切片 - 能够读取整个数据集的一部分(我们可以处理不能完全放入 RAM 的数据集)。
- 比较快二进制存储格式
- 支持压缩(尽管与 Snappy 编解码器 (Parquet) 相比压缩速度较慢)
- 支持附加行(可变)
- 对比
- 优点
- 泡菜
- 优点
- 非常快
- 对比
- 需要很多 space 磁盘
- 对于长期存储,可能会遇到兼容性问题。您可能需要指定 Pickle 版本以读取旧的 Pickle 文件。
- 优点
旧答案:
我只会考虑两种存储格式:HDF5 (PyTables) 和 Feather
这是我的
以下存储格式的比较:(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,所以最好与 你的 真实数据进行比较或至少具有相似的数据...