我在S3上有一个gzip文件,它包含JSON格式的数据。压缩后会占用200MB的存储空间,解压缩后会占用800MB的存储空间。
在较小的文件上运行程序是可以的。在大文件上,即使在将超时增加到600s之后,它仍会保持内存最大化或超时。观察内存使用情况,它会在失败之前攀升至16GB。
我尝试将文件解压缩。我还尝试使用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