통계 처리를 위해 팬 로그 HDFStore에 많은 양의 http 로그 (80GB +)를 가져옵니다. 단일 가져 오기 파일 내에서도로드 할 때 콘텐츠를 일괄 처리해야합니다. 지금까지 필자가 제안한 방법은 파싱 된 라인을 DataFrame으로 읽은 다음 DataFrame을 HDFStore에 저장하는 것이 었습니다. 내 목표는 인덱스 키를 DataStore의 단일 키에 대해 고유하게하는 것이지만 각 DataFrame은 자체 인덱스 값을 다시 시작합니다. HDFStore.append()가 DataFrame 인덱스 값을 무시하고 HDFStore 키의 기존 인덱스 값을 계속 추가한다고 알리는 메커니즘이 있지만 예상대로 찾을 수없는 것으로 예상했습니다. HDFStore에서 기존 인덱스 값을 증가시키면서 DataFrames를 가져오고 거기에 포함 된 인덱스 값을 무시하려면 어떻게합니까? 샘플 코드는 10 줄마다 배치로 묶습니다. 당연히 진짜는 더 커질 것입니다.팬더 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)? –