【发布时间】:2014-05-21 00:41:27
【问题描述】:
我有 500 多个 PyTables 存储,每个存储包含大约 300Mb 的数据。我想将这些文件合并到一个大存储中,使用 pandas append,如下面的代码所示。
def merge_hdfs(file_list, merged_store):
for file in file_list:
store = HDFStore(file, mode='r')
merged_store.append('data', store.data)
store.close()
追加操作非常慢(将单个存储追加到 merged_store 最多需要 10 分钟),奇怪的是 merged_store 的文件大小似乎每追加一个存储增加 1Gb。
我已经指出了根据文档应该可以提高性能的预期行总数,并且在阅读 Improve pandas (PyTables?) HDF5 table write performance 之后,我预计写入时间会很长,但是每 300Mb 几乎 10 分钟似乎太慢了,我不能了解为什么尺寸会增加。
我想知道我是否遗漏了什么?
有关其他信息,这里是 500 个 PyTables 之一的描述。
/data/table (Table(272734,)) ''
description := {
"index": Int64Col(shape=(), dflt=0, pos=0),
"values_block_0": Float64Col(shape=(6,), dflt=0.0, pos=1),
"id": StringCol(itemsize=11, shape=(), dflt='', pos=2),
"datetaken": Int64Col(shape=(), dflt=0, pos=3),
"owner": StringCol(itemsize=15, shape=(), dflt='', pos=4),
"machine_tags": StringCol(itemsize=100, shape=(), dflt='', pos=5),
"title": StringCol(itemsize=200, shape=(), dflt='', pos=6),
"country": StringCol(itemsize=3, shape=(), dflt='', pos=7),
"place_id": StringCol(itemsize=18, shape=(), dflt='', pos=8),
"url_s": StringCol(itemsize=80, shape=(), dflt='', pos=9),
"url_o": StringCol(itemsize=80, shape=(), dflt='', pos=10),
"ownername": StringCol(itemsize=50, shape=(), dflt='', pos=11),
"tags": StringCol(itemsize=505, shape=(), dflt='', pos=12)}
byteorder := 'little'
chunkshape := (232,)
【问题讨论】:
标签: python performance pandas hdfs pytables