Importuję duże ilości dzienników http (80 GB +) do Pandas HDFStore w celu przetworzenia statystycznego. Nawet w pojedynczym pliku importu muszę wsadową zawartość, gdy ją ładuję. Moja dotychczasowa taktyka polegała na czytaniu analizowanych linii w DataFrame, a następnie przechowywaniu DataFrame w HDFStore. Moim celem jest posiadanie unikalnego klucza indeksu dla pojedynczego klucza w DataStore, ale każda DataFrame ponownie uruchamia swoją własną wartość indeksu. Oczekiwałem, że HDFStore.append() będzie miał jakiś mechanizm, który powie mu, aby zignorował wartości indeksu DataFrame i po prostu dodaje do moich wartości indeksu klucza pliku HDFStore, ale nie może go znaleźć. Jak zaimportować DataFrame i zignorować zawarte w nich wartości indeksu, podczas gdy HDFStore zwiększa swoje istniejące wartości indeksu? Przykładowy kod poniżej partii co 10 linii. Naturalnie prawdziwa rzecz byłaby większa.W jaki sposób można dołączyć duże ilości danych do Pandas HDFStore i uzyskać naturalny unikalny indeks?
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)
Czy znasz [tę odpowiedź] (http://stackoverflow.com/a/14268804/1240268)? –