Büyük miktarlarda http loglarını (80 GB +) istatistiksel işlem için bir Pandas HDFStore'a aktarıyorum. Tek bir içe aktarma dosyasında bile, içeriği yükledikçe toplu halde toplulaştırmam gerekiyor. Şu ana kadar benim taktikim, ayrıştırılmış çizgileri bir DataFrame'e okumak ve ardından DataFrame'i HDFStore'a saklamaktı. Amacım, DataStore'da tek bir anahtar için dizin anahtarının benzersiz olmasını sağlamaktır, ancak her DataFrame, kendi dizin değerini yeniden yeniden başlatır. HDFStore.append() 'ın DataFrame dizin değerlerini görmezden gelmesini ve sadece HDFStore anahtarımın varolan dizin değerlerini eklemeye devam etmesini söyleyecek bir mekanizma olacağını tahmin ediyordum ama bulamıyor gibi görünüyor. DataFrames'i nasıl içe aktarırım ve HDFStore'un varolan dizin değerlerini artırırken içerdiği dizin değerlerini dikkate almayın? Her 10 satıra toplu olarak aşağıdaki örnek kod. Doğal olarak gerçek şey daha büyük olurdu.Bir Pandas HDFStore'a büyük miktarda veri nasıl eklenir ve doğal bir benzersiz dizin elde edilir?
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)
[Bu yanıtı] okuyor musunuz (http://stackoverflow.com/a/14268804/1240268)? –