Использование json.loads v / s yajl.loads для чтения большого файла JSON в python - PullRequest
0 голосов
/ 01 февраля 2019

Я работаю с огромными файлами JSON размером от 100-300 МБ.Поэтому, чтобы сэкономить место на диске (и время вычислений?), Я преобразовал файл JSON в файл .json.gz и действовал так:

with gzip.GzipFile(json_file, 'r') as f:
    return json.loads(f.read().decode('utf-8'))

json.loads не вызвал проблем с памятьюиспользование, но я хотел бы увеличить скорость, и, следовательно, я пытался py-yajl (не путать с yajl-py , который я тоже пытался, но это заняло гораздо больше времени, так как я анализировалпотоковый JSON), например:

yajl.loads(f.read().decode('utf-8'))

Но, как я видел на сайтах, утверждающих, что yajl быстрее библиотек json и simplejson, я не увидел улучшения в исполнениивремя.Наоборот, это заняло немного больше времени по сравнению с json.Я что-то здесь упускаю?В каких случаях yajl должен быть быстрее, чем json/simplejson?Скорость зависит также от структуры файла JSON?

Мой файл JSON выглядит следующим образом:

[
    {
        "bytes_sent": XXX,
        "forwardedfor": "-",
        "hostip": "XXX",
        "hostname": "XXX",
        "https": "on",
        "landscapeName": "XXX",
    },
    ...
]

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

1 Ответ

0 голосов
/ 01 февраля 2019

Если вы все равно читаете всю структуру в память, внешняя библиотека не дает никаких преимуществ.Мотивация такого инструмента заключается в том, что он позволяет вам обрабатывать вещи по частям, не загружая сначала всю вещь в память или вообще не загружая ее.Если ваш JSON представляет собой список вещей, обрабатывайте по одной вещи через обратные вызовы, которые предлагает библиотека.

...