我有大约6000个json.gz文件总计24GB,我需要进行各种计算。
因为我不知道我将从每个JSON文件中获取的行数,(因为我会拒绝一些包含无效数据的行),所以我估计每个JSON最多有2000
行。 / p>
我创建了一个数组形状为(6000*2000,10)
的Memmapped Numpy,并将json.gz
中的数据解析为Memmapped numpy [Total size = 2.5GB]
最后,事实证明,由于过高估计,最后10-15%的行都是零。现在因为我的计算性质,我需要从Memmapped numpy中删除这些无效行。优先级当然是时间,然后是内存。
这可能是最好的方法吗? 我以编程方式知道要删除的行的确切索引。
delete()
功能答案 0 :(得分:0)
You can use arr.base.resize
截断或放大数组,然后arr.flush()
将更改保存到磁盘:
In [169]: N = 10**6
In [170]: filename = '/tmp/test.dat'
In [171]: arr = np.memmap(filename, mode='w+', shape=(N,))
In [172]: arr.base.resize(N//2)
In [173]: arr.flush()
In [174]: arr = np.memmap(filename, mode='r')
In [175]: arr.shape
Out[175]: (500000,)
In [176]: arr.size == N//2
Out[176]: True