将数据写入HDFStore的性能问题

时间:2015-09-08 15:10:01

标签: pandas hdf5 pytables

我一直在将模拟输出数据写入已经变得非常大(~15 GB)的HDFStore。另外,我收到以下性能警告:

/home/extern/fsalah/.local/lib/python2.7/site-packages/tables/group.py:501: PerformanceWarning: group ``/`` is exceeding the recommended maximum number of children (16384); be ready to see PyTables asking for *lots* of memory and possibly slow I/O.

现在,我所经历的是,创建一个包含小数据集(100行,4列)的新子项大约需要30秒。但这只会发生,如果我在打开HDFStore之后第一次创建它并且如果那个孩子已经不存在了。将第一个新孩子添加到此HDFStore后,添加更多孩子可以正常工作(<0.1秒)。通过关闭并重新打开HDFStore,我可以轻松地重现此行为。 我正在运行以下代码片段:

databaseName = "store.hdf5"
store = pd.HDFStore(databaseName, complib='zlib', complevel=9)
timeslots = np.arange(0,100)
df = pd.DataFrame({'Timeslot': timeslots,
                   'a': [x[t] for t in timeslots],
                   'b': [y[t] for t in timeslots],
                   'c': np.repeat(z, (len(timeslots)))})
tableName = "runX"
store.put(tableName, df, data_columns=['Timeslot', 'a', 'b', 'c'])

    #some more puts with different table names follow here

store.close()

现在我的问题是:

为什么这些性能问题只出现在我第一次添加孩子而不是每次都出现?

出现这个问题的原因是什么?

我遇到了同样的问题 - 但缩小了(= ~5秒) - 对于一个大小约为3GB的HDF商店和更少的孩子(这里我没有得到任何性能警告)。

[我搜索了这个主题,但无法找到任何类似的问题]

0 个答案:

没有答案