#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.