統計処理用に大量のhttpログ(80GB +)をPandas HDFStoreにインポートしています。単一のインポートファイル内であっても、ロードするときにコンテンツをバッチする必要があります。これまでの私のやり方は、解析された行をDataFrameに読み込んだ後、DataFrameをHDFStoreに保存することでした。私の目標は、データストア内の単一のキーに対してインデックスキーをユニークにすることですが、各DataFrameはそれ自身のインデックス値を再開します。私はHDFStore.append()がDataFrameのインデックス値を無視し、HDFStoreキーの既存のインデックス値を追加し続けるように指示するメカニズムを持っていると予想していましたが、見つからないようです。 HDFStoreに既存のインデックス値をインクリメントさせながら、DataFramesをインポートし、そこに含まれるインデックス値を無視するにはどうすればよいですか? 10行ごとにバッチのサンプルコード。当然のことながら、実際のものはもっと大きくなります。Pandas HDFStoreにどのように大量のデータを追加し、自然なユニークなインデックスを得るには?
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)
あなたは[この回答を読んでいる](http://stackoverflow.com/a/14268804/1240268)? –