大数据集的hdf5和ndarray追加/高效时间方法
背景
我有一个包含 k 维时间序列的数据,每个时间序列用一个 m x (n+1) 的数组表示,里面存放的是浮点数值(n 列加上一列表示日期)。
举个例子:
大约有 400 万个时间序列,它们的样子是这样的:
20100101 0.12 0.34 0.45 ...
20100105 0.45 0.43 0.21 ...
... ... ... ...
每天,我想为一部分数据集(少于 k)添加一行新的数据。所有的数据集都存储在一个 hd5f 文件中的组里。
问题
有什么方法可以更快地把这些新行添加到数据集中呢?
输入是一个 CSV 文件,格式如下:
key1, key2, key3, key4, date, value1, value2, ...
其中日期在特定文件中是唯一的,可以忽略。我大约有 400 万个数据集。问题是我需要查找关键字,获取完整的 numpy 数组,调整数组大小,添加新行,然后再存储这个数组。这个 hd5f 文件的总大小大约是 100 GB。有没有什么办法可以加快这个过程?我想我们都知道,使用 SQLite 或类似的东西是行不通的——因为一旦我把所有数据都拿到手,平均每个数据集会有超过 100 万个元素,乘以 400 万个数据集。
谢谢!
1 个回答
0
你有没有看过 PyTables?它是一个建立在HDF5库之上的分层数据库。
它有几种数组类型,但“表格”类型听起来很适合你的数据格式。简单来说,它就像是NumPy记录数组的磁盘版,每一列可以是不同的数据类型。表格还有一个添加方法,可以轻松地增加额外的行。
至于从CSV文件加载数据,numpy.loadtxt的速度相当快。它会把文件加载到内存中,变成一个NumPy记录数组。