Python для чтения больших JSON использует всю память - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть файл gzip на S3, он содержит данные в формате JSON.В сжатом виде он занимает 200 МБ памяти, в разархивированном виде - 800 МБ.

Запуск программы с меньшим файлом - это нормально.Для большого файла он продолжает увеличивать объем памяти или время ожидания даже после увеличения времени ожидания до 600 с.Наблюдая за использованием памяти, она достигает 16 ГБ, а затем перестает работать.

Я попытался распаковать файл кусками.Я также попытался использовать ijson, потому что распаковка файла в строку и использование json.load () не удастся.

Почему моя программа использует так много памяти?Мой подход или понимание того, что здесь происходит, совершенно неверно?

    obj = s3.get_object(
            Bucket = BUCKET_NAME,
            Key= KEY)

    def stream_gzip_decompress(stream):
        dec = zlib.decompressobj(32 + zlib.MAX_WBITS)  
        for chunk in body:
            rv = dec.decompress(chunk)
            if rv:
                yield rv

    b = bytearray()
    for data in stream_gzip_decompress(body):
        b.extend(map(ord, data.decode('utf-8')))

    generator = ijson.items(io.BytesIO(b), "")

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