我试图加载超过20万条记录到我的Dynamodb表使用下面的代码从EMR 5节点集群。但它需要更多的时间和小时的时间来完全加载。我有更多的巨大的数据加载,但我想在几分钟的跨度加载它。如何实现这一点?
下面是我的代码。我只是改变了原来的列名称,我有20列插入。这里的问题是与缓慢加载。
import boto3
import json
import decimal
dynamodb = boto3.resource('dynamodb','us-west')
table = dynamodb.Table('EMP')
s3 = boto3.client('s3')
obj = s3.get_object(Bucket='mybucket', Key='emp-rec.json')
records = json.loads(obj['Body'].read().decode('utf-8'), parse_float = decimal.Decimal)
with table.batch_writer() as batch:
for rec in records:
batch.put_item(Item=rec)
1条答案
按热度按时间jvidinwx1#
首先,您应该使用Amazon CloudWatch检查是否达到了表中配置的写入容量单位的限制,如果是,您可以增加容量,至少在加载期间是这样。
第二,代码创建了一条记录的批处理,这不是很有效,
batch_writer()
可以用来处理多条记录,例如batch_writer()
文档中的示例代码:注意
for
循环是如何 * 在 *batch_writer()
内的吗?这样,多个记录存储在一个批处理中。但是,您的代码示例中的for
* 在 *batch_writer()
之外,这导致批处理大小为1。