Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 使用boto3将大量数据加载到Dynamodb非常慢_Python 3.x_Amazon Web Services_Amazon Dynamodb_Boto3 - Fatal编程技术网

Python 3.x 使用boto3将大量数据加载到Dynamodb非常慢

Python 3.x 使用boto3将大量数据加载到Dynamodb非常慢,python-3.x,amazon-web-services,amazon-dynamodb,boto3,Python 3.x,Amazon Web Services,Amazon Dynamodb,Boto3,我正试图使用以下来自EMR5节点集群的代码将超过2000万条记录加载到我的Dynamodb表中。但是完全加载需要越来越多的时间。我有更大的数据要加载,但我想在几分钟内加载它。如何做到这一点 下面是我的代码。我刚更改了原来的列名,我有20列要插入。这里的问题是加载速度慢 import boto3 import json import decimal dynamodb = boto3.resource('dynamodb','us-west') table = dynamodb.Table('EM

我正试图使用以下来自EMR5节点集群的代码将超过2000万条记录加载到我的Dynamodb表中。但是完全加载需要越来越多的时间。我有更大的数据要加载,但我想在几分钟内加载它。如何做到这一点

下面是我的代码。我刚更改了原来的列名,我有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 rows:
         batch.put_item(Item=rec)

首先,您应该使用Amazon CloudWatch检查您是否达到表中配置写入容量单位的限制。如果是这样,您可以增加容量,至少在负载期间是这样

其次,代码正在创建一条记录的批处理,这不是很有效。
batch\u writer()
可用于处理多条记录,例如在以下示例代码中:


注意
for
循环是如何在
批处理编写器()中进行的?这样,多个记录存储在一个批中。但是,您的代码示例的
for
位于
batch\u writer()
之外,这导致批大小为1。

是的!非常感谢您的回复。我将尝试建议的更改。同时,我发现BatchWriteItemInput的加载速度也非常快。所以,我想知道在加载大量数据时,这里哪个更好。我不知道。试一下,让我们知道你发现了什么!示例代码仅使用range来演示一批中可以有许多项。您的代码只需将
用于
with
中记录中的rec
。无需使用范围。您的
for
循环更合适。批导入和每次导入的速度相同(
with table.batch_writer() as batch:
    for _ in xrange(1000000):
        batch.put_item(Item={'HashKey': '...',
                             'Otherstuff': '...'})