我正在使用jupytr笔记本中的aws wrangler向dynamodb写入我的 Dataframe ,代码抛出"NoRegionError: You must specify a region."
。
如何解决这一问题?
import awswrangler as wr
from pathlib import Path
session = boto3.Session( aws_access_key_id='*****', aws_secret_access_key='**********')
dynamodb=session.resource('dynamodb',region_name='ca-central-1')
wr.dynamodb.put_df(df=table_program_info_final, table_name="Early_information")
1条答案
按热度按时间li9yvcax1#
我没有足够的字符或格式,所以我张贴这作为一个答案,以便我可以确保我传达这一正确。
现在的代码如下:
我认为这是需要作出的改变:
我的假设是--虽然我不确定--你认为你必须有一个名为dynamodb的变量。wrangler将通过使用语法(
wr.dynamodb
)神奇地将wrangler(wr
)和dynamo会话资源(dynamodb
)添加到一起来使用它(我缺少更好的单词和短语)。事实并非如此。题外话:如果我错了,那就是我的错,否则,也许我们可以讨论一下为什么不是这样,你从来没有在你的代码中使用过dynamodb
变量,所以当你使用wr.dynamodb.put_df()
时,它没有指定要使用的session,如果你使用wr.dynamodb.put_df(boto3_session=session)
而没有将session更改为boto3.Session(aws_access_key_id='id', aws_secret_access_key='key', region_name='the_region')
,那么就可以解释为什么它一直抛出错误,因为您的初始会话没有指定区域。如果我完全不理解这一点,请抱歉,但这似乎是我最好的猜测,因为文档似乎就是这样显示的。基于您的一条注解的附加说明:botocore.config
用于配置botocore客户端(实际上它仍然可以用于boto 3资源--我已经将两者结合起来使用来创建s3预签名的url)。根据我对它的一些经验,我假设您必须将该配置传递给客户端以供使用--因为您没有使用客户端,而且wrangler.dynamodb.put_df()
不支持配置,这里没有它的用处。这里是它的docs。