我希望对 bcolz 进行一些实验,看看它是否与我需要做的兼容。我有一个由大约 1100 万行和大约 120 列组成的数据集。此数据当前以 PyTables“表”格式存储在 HDF5 文件中。数据在 HDF5 文件中分为几个“组”(单独的节点),每个组包含不同的列。
我想要做的是将所有这些数据转换为磁盘上的 bcolz ctable,而不是一次将其全部读入内存。通过这样做,我能够为第一组做到这一点(basic
是其中一个组的名称):
bcolz.ctable.fromhdf5('census.h5', '/basic/table', rootdir='census')
当我这样做时,内存使用率仍然很低,表明它没有立即读取整个表。伟大的!但是,如果我尝试再次执行此操作,则附加到同一个 ctable:
>>> bcolz.ctable.fromhdf5('census.h5', '/political/table', rootdir='census', mode='a')
Traceback (most recent call last):
File "<pyshell#34>", line 1, in <module>
bcolz.ctable.fromhdf5('census.h5', '/political/table', rootdir='census', mode='a')
File "C:\FakeProgs\Python27\lib\site-packages\bcolz\ctable.py", line 714, in fromhdf5
ct = ctable(cols, names, **kwargs)
File "C:\FakeProgs\Python27\lib\site-packages\bcolz\ctable.py", line 205, in __init__
"You cannot pass a `columns` param in 'a'ppend mode.\n"
ValueError: You cannot pass a `columns` param in 'a'ppend mode.
(If you are trying to create a new ctable, perhaps the directory exists already.)
是的,当然它已经存在了。bcolz 的优点之一应该是很容易添加新列。如何利用这一优势将现有 HDF5 文件中的新列直接添加到现有的磁盘 ctable 中,而无需先将所有新列读入内存?