Ich importiere große Mengen von http-Logs (80GB +) in einen Pandas HDFStore zur statistischen Verarbeitung. Selbst innerhalb einer einzelnen Importdatei muss der Inhalt beim Laden geladen werden. Meine bisherige Taktik war es, die geparsten Zeilen in einen DataFrame zu lesen und den DataFrame dann im HDFStore zu speichern. Mein Ziel ist es, den Indexschlüssel für einen einzelnen Schlüssel im DataStore eindeutig zu machen, aber jeder DataFrame startet seinen eigenen Indexwert erneut neu. Ich hatte erwartet, dass HDFStore.append() einen Mechanismus haben würde, um zu sagen, dass er die DataFrame-Indexwerte ignoriert und einfach zu den vorhandenen Indexwerten meines HDFStore-Schlüssels hinzufügt, aber nicht gefunden werden kann. Wie importiere ich DataFrames und ignoriere die darin enthaltenen Indexwerte, während der HDFStore seine vorhandenen Indexwerte erhöht? Beispielcode unterhalb der Stapel alle 10 Zeilen. Natürlich wäre das echte Ding größer.Wie hängt man große Datenmengen an einen Pandas HDFStore an und erhält einen natürlichen eindeutigen Index?
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)
Haben Sie [diese Antwort] (http://stackoverflow.com/a/14268804/1240268) gelesen? –