amazon-s3 - 使用 lambda 函数通过 s3 存储桶将巨大的 .csv 文件上传到 dynamodb 时出错
问题描述
我的功能是
导入 boto3 导入 csv s3 = boto3.client('s3') dynamodb = boto3.resource('dynamodb')
def lambda_handler(事件,上下文):
bucket='bucketname'
file_name='filename.csv'
obj = s3.get_object(Bucket=bucket,Key=file_name)
rows = obj['Body'].read()
lines = rows.splitlines()
# print(lines)
reader = csv.reader(lines)
parsed_csv = list(reader)
num_rows = (len(parsed_csv))
table = dynamodb.Table('table_name')
with table.batch_writer() as batch:
for i in range(1,num_rows):
Brand_Name= parsed_csv[i][0]
Assigned_Brand_Name= parsed_csv[i][1]
Brand_URL= parsed_csv[i][2]
Generic_Name= parsed_csv[i][3]
HSN_Code= parsed_csv[i][4]
GST_Rate= parsed_csv[i][5]
Price= parsed_csv[i][6]
Dosage= parsed_csv[i][7]
Package= parsed_csv[i][8]
Size= parsed_csv[i][9]
Size_Unit= parsed_csv[i][10]
Administration_Form= parsed_csv[i][11]
Company= parsed_csv[i][12]
Uses= parsed_csv[i][13]
Side_Effects= parsed_csv[i][14]
How_to_use= parsed_csv[i][15]
How_to_work= parsed_csv[i][16]
FAQs_Downloaded= parsed_csv[i][17]
Alternate_Brands= parsed_csv[i][18]
Prescription_Required= parsed_csv[i][19]
Interactions= parsed_csv[i][20]
batch.put_item(Item={
'Brand Name':Assigned_Brand_Name
'Brand URL':Brand_URL,
'Generic Name':Generic_Name,
'Price':Price,
'Dosage':Dosage,
'Company':Company,
'Uses':Uses,
'Side Effects':Side_Effects,
'How to use':How_to_use,
'How to work':How_to_work,
'FAQs Downloaded?':FAQs_Downloaded,
'Alternate Brands':Alternate_Brands,
'Prescription Required':Prescription_Required,
'Interactions':Interactions
})
响应:{“errorMessage”:“2020-10-14T11:40:56.792Z ecd63bdb-16bc-4813-afed-cbf3e1fa3625 任务在 3.00 秒后超时”}
解决方案
您尚未指定 CSV 文件有多少行。“巨大”非常主观,因此您的任务可能由于 DynamoDB 表的限制而超时。
如果您在要加载到的表上使用预置容量,请确保分配了足够的容量。如果您使用的是按需容量,那么这可能是由于表需要扩展时发生的按需分区。
无论哪种方式,您都可能希望为此类情况添加一些错误处理,并在超时时添加延迟,然后再重试和恢复。
需要记住的是,写入 Dynamo 始终需要 1 个 WCU,单个分区可以拥有的最大容量为 1000 WCU,因此随着写入吞吐量的增加,当您按需使用时,表可能会在后台进行多次拆分模式。对于预置模式,您必须首先分配足够的容量,否则您将被限制为写入多少项目/秒,您分配了写入容量。
推荐阅读
- php - 如何用 ChromDriver 和 yii2 解决“元素不可交互”?
- c - 为什么我的开关盒不适用于乘法或加法
- vue.js - 如何应用选择器选项仅在 Element UI 日期选择器中启动日历
- material-ui - Material UI IconButton onClick 不允许处理事件
- javascript - 无法选择元素:找不到节点
- flutter - 从一个更改到另一个时,所有选项卡都会不断重建
- html - 如何让图像填充 div 内的剩余空间?
- java - 在泛型 Collection 方法中发送 ArrayList
- go - 将 []int64 转换为 []uint64 的最佳方法是什么
- snowflake-cloud-data-platform - Snowflake Snowpipe - 电子邮件警报机制