Я создал анализатор журналов в python для анализа данных журналов и их структурирования и сохранения результатов в csv.У меня есть 5 ГБ данных со мной в разных файлах.Я успешно могу проанализировать данные, но время, затрачиваемое на выполнение задания, больше для его улучшения. Я использую многопроцессорную обработку в качестве опции, но эффективность все же значительно не повышается.Что я могу сделать, чтобы эффективно анализировать эти большие данные и сократить время синтаксического анализа.
Вложение кода для того же самого.
import glob
import errno
import re
import pandas as pd
import concurrent.futures
log_pattern = regex expression
log_dict = []
def parse_file(name):
try:
with open(name, "r", encoding= "utf-8") as f:
for line in f:
match = log_pattern.match(line)
if not match:
continue
grps = match.groups()
log_dict.append({"date": grps[0], "timestamp": grps[1] , "type": grps[2], "text": grps[3]})
df = pd.DataFrame(log_dict)
df.to_csv("temp.csv")
#return df
#f.close()
except IOError as exc:
if exc.errno != errno.EISDIR:
raise
return 0
#Create a pool of process. By default one is created for each CPU in your machine
def main():
with concurrent.futures.ProcessPoolExecutor() as executor:
files = glob.glob(*.log)
for file, name in zip(files, executor.map(parse_file, files)):
print(file, name)
if __name__ == '__main__':
main()