【发布时间】:2020-07-24 18:15:27
【问题描述】:
我正在尝试在 AWS lambda 中将数据从 CSV 转换为 JSON(使用 Python 3)。文件大小为 65 MB,因此在完成进程之前超时,整个执行获取失败。
我需要知道如何处理这种情况,AWS Lambda 应该能够在超时期限内处理最多的数据集,而剩余的有效负载应该保存在 S3 存储桶中。
下面是转换代码
import json
import boto3
import csv
import os
json_content = {}
def lambda_handler(event, context):
s3_source = boto3.resource('s3')
if event:
fileObj=event['Records'][0]
fileName=str(fileObj['s3']['object']['key'])
eventTime =fileObj['eventTime']
fileObject= s3_source.Object('inputs3', fileName)
data = fileObject.get()['Body'].read().decode('utf-8-sig').split()
arr=[]
csvreader= csv.DictReader(data)
newFile=getFile_extensionName(fileName,extension_type)
for row in csvreader:
arr.append(dict(row))
json_content['Employees']=arr
print("Json Content is",json_content)
s3_source.Object('s3-output', "output.json").put(Body=(bytes(json.dumps(json_content).encode('utf-8-sig'))))
print("File Uploaded")
return {
'statusCode': 200,
'fileObject':eventTime,
}
AWS Lambda 函数配置:
内存:640 MB
超时:15 分钟
【问题讨论】:
-
您的 AWS Lambda 函数是同步调用还是异步调用?为您的功能设置的超时时间是多少?转换性能是否受可用 CPU 性能的限制?你的转换代码是什么样子的?
-
AWS Lambda 的最大超时时间为 15 分钟,在 65 MB 的文件中,您正在处理多少行?如果您可以发布您的代码,我们也可以尝试一些优化。
-
嗨@Dunedan 和 Hussain,我已经更新了代码和其他详细信息。它是一个基本的 csv 到 json 转换。你可以看看
-
您能否提供执行此 AWS Lambda 函数产生的日志消息?如果将可用内存增加到 1792MB,问题会消失吗?
-
嗨@Dunedan .. 这是来自 lambda 执行的日志 ### REPORT RequestId: 53abacf2-8484-2342347 持续时间:723205.42 毫秒计费持续时间:723300 毫秒内存大小:1792 MB 使用的最大内存: 1792 MB 初始化持续时间:252.77 毫秒 RequestId:53abacf2-848431312312 错误:运行时因错误退出:信号:已终止 Runtime.ExitError
标签: python-3.x aws-lambda python-3.6 python-3.7 aws-serverless