我正在将大量 http 日志 (80GB+) 导入 Pandas HDFStore 进行统计处理。即使在单个导入文件中,我也需要在加载内容时对其进行批处理。到目前为止,我的策略是将解析后的行读入 DataFrame,然后将 DataFrame 存储到 HDFStore 中。我的目标是让 DataStore 中的单个键的索引键是唯一的,但每个 DataFrame 都会再次重新启动它自己的索引值。我期待 HDFStore.append() 会有一些机制告诉它忽略 DataFrame 索引值并继续添加到我的 HDFStore 键的现有索引值但似乎找不到它。如何导入 DataFrames 并忽略其中包含的索引值,同时让 HDFStore 增加其现有索引值?下面的示例代码每 10 行批处理一次。自然实物会更大。
if hd_file_name:
"""
HDF5 output file specified.
"""
hdf_output = pd.HDFStore(hd_file_name, complib='blosc')
print hdf_output
columns = ['source', 'ip', 'unknown', 'user', 'timestamp', 'http_verb', 'path', 'protocol', 'http_result',
'response_size', 'referrer', 'user_agent', 'response_time']
source_name = str(log_file.name.rsplit('/')[-1]) # HDF5 Tables don't play nice with unicode so explicit str(). :(
batch = []
for count, line in enumerate(log_file,1):
data = parse_line(line, rejected_output = reject_output)
# Add our source file name to the beginning.
data.insert(0, source_name )
batch.append(data)
if not (count % 10):
df = pd.DataFrame( batch, columns = columns )
hdf_output.append(KEY_NAME, df)
batch = []
if (count % 10):
df = pd.DataFrame( batch, columns = columns )
hdf_output.append(KEY_NAME, df)