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

时间:2018-04-25 22:24:35

标签: python json performance

我遇到了一个性能问题,我如何将日志连接起来,然后将它们过滤到我需要的信息。我没想到这会成为一个问题,但我的hacky方法正在变得越来越明显,时间太长了(比如在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命令可以有效地执行这种操作,我也会对这些建议持开放态度。

提前感谢您的帮助!

0 个答案:

没有答案