Самый эффективный способ объединения и фильтрации многих файлов .jsonl - PullRequest
0 голосов
/ 26 апреля 2018

Я сталкиваюсь с проблемой производительности, связанной с тем, как я беру журналы для объединения, а затем фильтрую их только по той информации, которая мне нужна.Я не ожидал, что это станет проблемой, но становится ясно, что мой хакерский подход идет слишком долго (как в диапазоне 6-12 часов, что для меня неприемлемо)

Iу меня есть около 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

Опять же, память непроблема здесь, потому что каждый объединяемый журнал - только маленькая строка - даже с миллионами строк, это - только несколько сотен МБ.Я больше всего знаком с python, поэтому я бы предпочел решение, использующее его, но если есть какой-то инструмент командной строки .json или команда bash, которая делает такие вещи эффективно, я тоже открыт для этих предложений.

Заранее спасибо за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...