项目目前维护s3bucket,其中包含一个1.5gb的大zip大小,包含.xpt和.sas7dbat文件。解压文件大小为20 GB。在
尝试解压缩文件并将相同的文件夹结构推送到S3
以下代码适用于较小的zip文件,但对于大型zip文件(1.5GB)则失败:
for obj in bucket.objects.all():
#file_name = os.path.abspath(obj.key) # get full path of files
key = urlparse(obj.key.encode('utf8'))
obj = client.get_object(Bucket='my-zip-bucket', Key=obj.key)
with io.BytesIO(obj["Body"].read()) as tf:
# rewind the file
tf.seek(0)
with zipfile.ZipFile(tf, mode='r') as zipf:
for file in zipf.infolist():
fileName = file.filename
putFile = client.put_object(Bucket='my-un-zip-bucket-', Key=fileName, Body=zipf.read(file))
putObjects.append(putFile)
错误:内存大小:3008 MB已使用的最大内存:3008 MB
我想验证:
如本AWS Lambda Limits link所述:
但是AWS Lambda规定了一些限制,例如,部署包的大小或每次调用分配Lambda函数的内存量。
这里,您遇到的问题是因为需要“每次调用分配Lambda函数的内存量”。不幸的是,Lambda不是适用于此情况的解决方案。您需要使用EC2方法。在
当你的整体内存需求很高时,我不认为Lambda是一个很好的解决方案。我不是关于指定的文件类型是如何工作的,但是一般来说,读取/处理大文件使用分块方法来避免大内存需求。分块方法是否有效取决于您的业务需求。在
有一个使用AWS胶水的无服务器解决方案!(想清楚这一点,我差点就死了)
此解决方案分为两部分:
请参阅下面我的代码,其中解压缩ZIP文件并将内容放回同一个bucket(可配置)。在
如有帮助,请投赞成票:)
调用名为YourGlueJob的粘合作业的Lambda脚本(python3)
解压文件的AWS胶水作业脚本
^{pr2}$相关问题 更多 >
编程相关推荐