Python中读取速度最快的文件格式是什么?
我想用 python 对一堆数据进行处理,之后供 tensorflow 使用。不知道应该将这堆数据转成什么格式(最好是跨平台的),才能读取速度最快。
这些数据大小约 200G ( matlab 的 mat 格式),是由很多很多的小文件组成的,里面的内容是格式化的数字和字符。
Python中读取速度最快的文件格式是什么?
HDF5 怎么样? google 到了这个。
对于纯读取速度,二进制格式通常最快,特别是结构化数组(如NumPy的.npy格式)或pickle。
如果你处理的是数值数据,用numpy.save()保存的.npy文件加载极快,因为它是内存映射友好的二进制格式:
import numpy as np
# 保存
arr = np.random.rand(1000000, 10)
np.save('data.npy', arr)
# 读取
loaded_arr = np.load('data.npy')
如果是通用Python对象,pickle(尤其是cPickle/pickle协议5)也很快:
import pickle
data = {'key': list(range(1000000))}
with open('data.pkl', 'wb') as f:
pickle.dump(data, f, protocol=5)
with open('data.pkl', 'rb') as f:
loaded_data = pickle.load(f)
对于大型表格数据,Parquet(通过pyarrow或fastparquet)在列式存储和压缩上平衡得很好,读取也很快。
总结:要最快读取,首选二进制格式,根据数据类型选.npy或pickle。
了解下 hadoop?
hadoop 稍微了解一点,这个学习成本太高了,我应该不需要。
二进制应该是最快的,如果设计良好。
不懂啊,没遇到过这么大的文件读取。 能不能压缩一下
很多小文件,应该压缩不了多少。。。
重点是数量有多少,得看是瓶颈在 i/o 还是在 python。
如果在 i/o 你就提前合并成一个文件(举个例子,例如 iso 文件),然后每次读取一定的大小到内存就可以了。
如果数量太大太大的话,python 光是调用函数消耗就特别大,纯 python 我也不知道有什么办法。你可以试试 for 一个千万位的数字,然后再在循环里进行一次乘法操作,慢到你想吐血(1s 左右的时长)。
HDF5 是我见过最好的
其他的可以考虑 pickle, protobuf
用 h5py 读写 HDF5。
文件数量大概是 3000*2000 这么多,每个文件大概 30k 这么大。我需要先用 python 预处理一遍文件,把我需要的内容提取出来,以便 tensorflow 调用。这个过程肯定要删掉很多数据,并且做一些归一化。预处理这个过程需要处理多长时间都无所谓,因为只需处理一遍,可以慢慢处理。主要是 tensorflow 调用那个过程要快
看了楼上各位的回复,我觉得我就去研究一下 HDF5 吧。谢谢各位。
hdfs 不适合寸小文件
sorry,看成了 hdf5
可以试试 netcdf4,built on hdf5
谢谢。我学习一下
Berkley DB
我感觉没有什么问题啊。
就是读取六百万个文件然后处理之后再保存下来然后丢给 TensorFlow 去处理。
你讲处理六百万个文件速度慢一点没关系因为是一次性处理的
那 TensorFlow 那边速度快不快得看机器配置啊 (我没实际用过 TensorFlow
你把六百万个文件挨个读取之后保存成一个 pkl 文件,然后下次要使用的时候直接 load 进来就可以。
搞机器学习的应该很有钱,所以不用考虑内存不足的问题
关注一波楼主,对这个很感兴趣,只是现在没时间没设备,搞不了这个


