如何解决从Azure Blob压缩流Python SDK
我可以在下载数据时将数据从Azure Blob压缩到gzip吗?我希望尽可能避免将所有数据存储在内存中。
我尝试了两种不同的方法(compress_chunk和compress_blob)功能。我不确定整个blob是否在压缩之前就已存在于内存中,或者我是否可以按某种方式对其进行压缩。
def compress_chunk(data):
data.seek(0)
compressed_body = io.BytesIO()
compressor = gzip.open(compressed_body,mode='wb')
while True:
chunk = data.read(1024 * 1024 * 4)
if not chunk:
break
compressor.write(chunk)
compressor.flush()
compressor.close()
compressed_body.seek(0,0)
return compressed_body
def compress_blob(data):
compressed_body = gzip.compress(data.getvalue())
return compressed_body
def process_download(container_name,blob):
with io.BytesIO() as input_io:
blob_service.get_blob_to_stream(container_name=container_name,blob_name=blob.name,stream=input_io)
compressed_body = compress_chunk(data=input_io)
解决方法
我认为您知道如何压缩数据。因此,以下只是为了澄清一下。
我不确定整个blob是否在内存中 压缩。
当需要下载Blob数据进行处理时,我们使用官方方法下载Blob。此时,它是流的形式。它不在磁盘上,但当然会使用程序分配的内存。
Azure没有提供一种在azure上预压缩数据的方法:
因此,当我们要处理数据时,必须首先下载它,并且当它作为流下载时,它当然会占用内存。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。