pandas 无区域错误:必须指定区域,写入dynamodb时出错

hlswsv35  于 2022-12-02  发布在  其他
关注(0)|答案(1)|浏览(154)

我正在使用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")
li9yvcax

li9yvcax1#

我没有足够的字符或格式,所以我张贴这作为一个答案,以便我可以确保我传达这一正确。
现在的代码如下:

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")

我认为这是需要作出的改变:

import awswrangler as wr

from pathlib import Path

# here
session = boto3.Session( aws_access_key_id='*****', aws_secret_access_key='**********', region_name='ca'central-1')

# nothing is done with this
dynamodb=session.resource('dynamodb',region_name='ca-central-1')

# and here
wr.dynamodb.put_df(df=table_program_info_final, table_name="Early_information", boto3_session=session)

我的假设是--虽然我不确定--你认为你必须有一个名为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

相关问题