【问题标题】:Pytables error when record descriptor exceeds 16,384 bytes记录描述符超过 16,384 字节时的 Pytables 错误
【发布时间】:2014-04-08 07:59:19
【问题描述】:

在探索大型新数据集时,我喜欢将整个文件作为字符串数据导入,进行一些打印输出和频率,然后为最后的预处理步骤微调更准确的数据描述。

Pytables 似乎很适合这个,它支持字符串数据类型。但是,当我在描述中添加足够多的列以使最大行大小超过 16,384 字节时,我收到了一个错误。我已经通过一次添加一列并创建 h5file 来测试这是导致错误的原因。

pytables 行是否有最大大小?我在文档中找不到任何内容,也找不到增加大小限制(如果存在)的方法。

代码:

from tables import *

# record descriptor
class Record(IsDescription):
     var1 = StringCol(16)
     var2 = StringCol(16)
     var3 = StringCol(16)
     var4 = StringCol(16)
     ...
     varN = StringCol(16)


h5file = open_file("test.h5", mode="w", title="Test file")

group = h5file.create_group("/", 'Test', 'Test group')

table = h5file.create_table(group, 'Test', Record, 'Test example')

错误:

HDF5ExtError: Problems creating the table

版本信息:

In [0]: tables.__version__
Out[0]: '3.1.0'

In [1]: sys.version
Out[1]: '2.7.6 |Anaconda 1.9.1 (64-bit)| (default, Nov 11 2013, 10:49:15) [MSC v.1500 64 bit (AMD64)]'

【问题讨论】:

    标签: python pandas pytables


    【解决方案1】:

    这是我知道的一个限制,每行 512 列(尽管它说可以更改,不确定是否必须重新编译),请参阅 here

    我不知道每行的字节数限制是否是 HDF5 硬限制。 (虽然我怀疑是这样;它们是各种硬限制,例如每组 64KB 的元数据)。这些允许 HDF5 文件的固定大小布局,以获得良好的性能。

    也许只是分成几个子表是你最好的选择。

    【讨论】:

    • 谢谢,杰夫。我知道如果我标记 Pandas,我会得到你宝贵的见解。我已经在根据您以前的答案之一研究子表解决方案。
    猜你喜欢
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 2012-02-10
    • 2011-09-08
    相关资源
    最近更新 更多