aws-glue - 通过 AWS Glue Python 脚本连接到 Postgres
问题描述
通过 AWS Glue 文档,我看不到任何关于如何通过“Python shell”类型的 Glue 作业连接到 Postgres RDS 的内容。我已经在 AWS Glue 中设置了 RDS 连接并验证我可以连接到我的 RDS。此外,在创建 Python 作业时,我可以看到我的连接并将其添加到脚本中。
如何使用添加到 Glue 作业的连接来运行一些原始 SQL?
提前致谢,
解决方案
在glue etl(spark)中有两种可能的方式从RDS访问数据:
第一个选项:
- 在 RDS 之上创建粘合连接
- 在第一步创建的胶水连接之上创建胶水爬行器
- 运行爬网程序以使用指向 RDS 表的数据库和表填充粘合目录。
- 使用胶水目录中新创建的数据库和表在胶水 etl 中创建动态框架。
代码示例:
from pyspark.context import SparkContext
from awsglue.context import GlueContext
glueContext = GlueContext(SparkContext.getOrCreate())
DyF = glueContext.create_dynamic_frame.from_catalog(database="{{database}}", table_name="{{table_name}}")
第二个选项
使用 spark sql 创建数据框:
url = "jdbc:postgresql://<rds_host_name>/<database_name>"
properties = {
"user" : "<username>",
"password" : "<password>"
}
df = spark.read.jdbc(url=url, table="<schema.table>", properties=properties)
笔记 :
- 您需要通过 postgres jdbc jar 来使用 spark sql 创建数据库。
- 我在胶水 etl 上尝试了第一种方法,在 python shell (dev-endpoint) 上尝试了第二种方法
推荐阅读
- mysql - dictSession.getSchema 不是函数 (Node.js/MySQL/xdevapi)
- angular - 未处理的承诺拒绝:Zone.js 检测到 ZoneAwarePromise : Angular
- python - 在python中使用客户端证书进行相互身份验证
- c# - Exclude values "starting with" from column in WPF DataGrid
- python-3.x - 获取本地网络上未在 /etc/hosts 中设置的远程计算机的主机名
- r - .5 的 R round() 规则
- python - 为什么我的样本权重会破坏我的神经网络?
- odoo - 如何为 res.user 而不是 res.partner 在 Odoo 的 Web 模块中自动登录?
- javascript - 使用 VueJs 导入 json 的问题
- python - 在 Heroku 上部署 Django?