Рекомендации по чтению и обработке нескольких больших файлов данных?

#python #json #gzip #large-data

#python #json #gzip #большие данные

Вопрос:

Если у меня есть пара больших файлов JSON-файлов (сжатых на 500 МБ, несжатых на 3 ГБ), каковы некоторые рекомендации по работе с ними?

Я пробовал:

 combined_list = []
with gzip.open("compressed_JSON.gz", "r") as file:
    for each in file:
        combined_list.append(json.loads(each))

# do stuff with newly appended list (dataframe,
 calculations, visualization etc)
 

Что занимает довольно много времени. Кроме того, моя память практически полностью расходуется во время выполнения, и большой объем все еще остается «используемым» даже после его завершения.

В качестве альтернативы, я пробовал:

 combined_list = []
with gzip.open("compressed_JSON.gz", "r") as file:
    for each in file:
        combined_list.append(json.loads(each))
with gzip.open("compressed_JSON2.gz", "r") as file2:
    for each in file2:
        combined_list.append(json.loads(each))

# do stuff with newly appended list (dataframe,
 calculations, visualization etc)
 

Который выполняет два из пяти файлов одновременно. Это занимает, возможно, в 7-8 раз больше времени по сравнению с первым методом. Я не могу себе представить, как я смогу справиться со всеми 5.

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

Размер заполненного добавленного списка составляет всего около 10 МБ, sys.getsizeof() поэтому я не уверен, что продолжает «съедать» мои ресурсы после завершения выполнения кода.

Заранее спасибо.

Ответ №1:

Возможно, это не на 100% то, что вы ищете, но примите это во внимание:

Мне пришлось проанализировать и исказить файл 11G. Однако это был обычный текст. Сначала попробовал Python, но также столкнулся с проблемами. В итоге я использовал C # для анализа файла, обработки многопоточных данных и, в конечном итоге, записи в numpy-array, используя https://github.com/SciSharp/Numpy.NET

Если у вас есть 5 разных файлов, вы можете сделать это также многопоточным, при условии, что у вас достаточно оперативной памяти.

HTH.