连接和过滤许多.jsonl文件的最有效方法

2024-04-20 12:35:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了一个性能问题,就是如何将日志连接起来,然后将它们过滤为只需要的信息。我没想到这会成为一个问题,但越来越明显的是,我的黑客方法正在采取的方式,太长了(比如在6-12小时的范围内,这是我不能接受的)

我在一个文件夹中有大约70K.jsonl文件,每个文件有大约200行,我试图只从中提取某些字段并将它们连接到一个文件中。我只拉了三个字段,它们是短字符串,所以它不是非常内存密集型的,但是我的方法花费了太长的时间,我知道必须有一个更快的方法。你知道吗

现在,我只是在使用熊猫,因为我对它很熟悉,写一个脚本只需要很少的时间——这是我目前的功能:

from pathlib import Path
import pandas as pd

def read_files_and_concatenate(parent_directory):
    final_df = pd.DataFrame()
    count = 0
    for file in Path(parent_directory).iterdir():
        log_file = pd.read_json(str(file), dtype=str, lines=True)
        final_df = pd.concat([final_df, log_file[['record_id', 
                                                  'updated_at', 
                                                'updates_submitted']]])
        print('{} logs in part, {} logs in 
              master, {} files concatenated'.format(len(log_file), 
                                                 len(final_df), count))
        count += 1
return final_df

再说一次,内存不是问题,因为连接的每个日志都只是一个小字符串——即使有数百万行,也只有几百MB。我最熟悉python,所以我更喜欢使用它的解决方案,但是如果有某种.json命令行工具或bash命令能够有效地完成这类工作,我也愿意接受这些建议。你知道吗

提前谢谢你的帮助!你知道吗


Tags: 文件path方法内存字符串inimportlog