python - 在 Python 中建立引擎连接时出现 AWS Wrangler 错误,必须指定区域吗?
问题描述
这可能是一个简单的修复,但我无法运行此代码。我一直在使用 AWS Secrets Manager,在 Pycharm 2020.2.3 上没有任何问题。然而,AWS Wrangler 的问题如下所列:
读入数据框
test_df = pd.read_csv(source, encoding='latin-1')
检查 df 数据类型
data_types_df = test_df.dtypes
print('Data type of each column of Dataframe:')
print(data_types_df)
将列转换为正确的数据类型
test_df['C'] = pd.to_datetime(test_df['C'])
test_df['E'] = pd.to_datetime(test_df['E'])
检查 df 数据类型
df_new = test_df.dtypes
print('Data type of each column of Dataframe:')
print(df_new)
我已经尝试了下面的两个片段,我得到了同样的错误:
engine = wr.catalog.get_engine("aws-data-wrangler-redshift", region_name=region_name)
engine = wr.catalog.get_engine('redshift+psycopg2://' + Username + ":" + Password + ClusterURL)
错误:
botocore.exceptions.NoRegionError: You must specify a region.
然后我将尝试使用以下两种方法之一将 Pandas Dataframe 转换为 redshift 中的自定义表:
path = f"s3://{bucket}/stage/"
iam_role = 'ARN'
复制df到redshift自定义表
wr.db.copy_to_redshift(
df=df_new,
path=path,
con=engine,
schema="custom",
table="test_df",
mode="overwrite",
iam_role=iam_role,
primary_keys=["c"]
)
熊猫df到红移
wr.pandas.to_redshift(
dataframe=df_new,
path=path,
schema="custom",
table="test_df",
connection=con,
iam_role="YOUR_ROLE_ARN",
mode="overwrite",
preserve_index=False
)
任何帮助将非常感激 :)
解决方案
Data Wrangler 在后台使用 Boto3。Boto3 将寻找AWS_DEFAULT_REGION
env 变量。所以你有两个选择:
~/.aws/config
在你的文件中设置这个:
[default]
region=us-east-1
或者在您的 PC 中将其设置为 env 变量:
export AWS_DEFAULT_REGION=us-east-1
More specific you can set environment variables in PyCharm
推荐阅读
- laravel - 在 get() 之后执行 where()
- ios - Fastlane Beta:Bundler::GemNotFound:在任何源中都找不到 CFPropertyList-3.0.0
- asp.net-core - 使用标识框架在 Windows 服务中托管 ASP.NET Core
- php - mysqli_query 期望参数 1 是 mysqli AND mysqli_fetch_all 问题
- c - 结果不一致和 pthread 混淆
- r - 匹配“foo”的实例,后面没有“bar”
- c# - 根据文本框输入生成数据网格行
- css - javafx tableview - 突出显示 setCellSelectionEnabled(true) 上的行
- reactjs - 如何禁用默认 BackHandler 而不会在单个场景中覆盖它?
- nativescript - 用于缓存的 Nativescript 插件