我有100个大文件,每个文件约5GB。 我需要根据其内容将其拆分为文件。 大文件有很多行,每一行都是这样
for i in [...]:
try:
func1(i)
except Exception as ex:
print(ex)
func2(i)
我需要根据task_op_id分割内容,每个大文件都有350个不同的task_op_id,因此每个文件都应生成350个不同的小文件,每个文件都具有相同的task_op_id内容。
我尝试过的方法是:
{"task_op_id": 143677789, "task_op_time": 1530927931, "task_op_tag": 1, "create_time": 1530923701, "status": 2}
但是速度太慢,处理10GB数据需要2个小时。
那么有没有更好的方法来处理数据?
非常感谢您的帮助。
答案 0 :(得分:0)
我推测主要的耗时过程是文件IO操作。您可以细分运行时间并检查一下吗?
另一个原因可能是JSON解析器。查看this线程以了解更多信息。
答案 1 :(得分:0)
您可以对这些文件进行排序吗? 如果是,请尝试不要将每一行都解析为JSON,而只能将其解析为新ID。
像这样吗?
def get_id(json_line):
data_dict = json.loads(json_line)
return data_dict['task_op_id']
def split_to_id_file(original_file):
current_id = 'blabla_xxxxxxxx'
destination_file = 'processed_data2/data_over_one_id/break_into_ids/'
with open(original_file) as f1:
for line in f1:
if current_id not in line:
if not f2.closed:
f2.close()
task_op_id = get_id(line)
current_id = "\"task_op_id\": " + task_op_id
f2 = open(destination_file+str(task_op_id), 'a+')
f2.write(line+'\n')