pyspark - 在 pyspark 中从另一个数据库加载表
问题描述
我目前正在使用 AWS 和 PySpark。我的表存储在 S3 中,可从 Athena 查询。
在我的 Glue 工作中,我习惯于将表格加载为:
my_table_df = sparkSession.table("myTable")
但是,这一次,我想访问同一数据源 (AwsDataCatalog) 中另一个数据库的表。所以我做了一些效果很好的事情:
my_other_table_df = sparkSession.sql("SELECT * FROM anotherDatabase.myOtherTable")
我只是在寻找一种更好的方法来编写相同的东西,而无需在一行中使用 SQL 查询,只需为此操作指定数据库即可。应该看起来像的东西
sparkSession.database("anotherDatabase").table("myOtherTable")
欢迎任何建议
解决方案
您可以为此使用DynamicFrameReader。这将返回一个 DynamicFrame。不过,您可以在该 DynamicFrame 上调用 .toDF() 将其转换为本机 Spark DataFrame。
sc = SparkContext()
glue_context = GlueContext(sc)
spark = glue_context.spark_session
job = Job(glue_context)
data_source = glue_context.create_dynamic_frame.from_catalog(
database="database",
table_name="table_name"
).toDF()
推荐阅读
- python - Azure Blob 触发 Python 函数写入 CosmosDB 错误
- php - 如何定位帖子数组以制作一行代码而不是多行代码?
- javascript - 我怎么能没有背景颜色扩展整个容器?
- docker - 如何在 jenkins + docker + kubernetes localy 上运行
- sql - 有些人有几个单独的策略我如何过滤数据,所以我只能看到每个电子邮件地址的最近联系日期?
- flutter - Flutter Firestore 异步函数/等待结果
- react-native - 反应原生地图标记不显示?
- javascript - 博主 | 为什么我的 javascript 代码只显示一篇文章?
- python - 如何用 for 循环计算字符串中的字符
- communication - CANopen 透明模式背后的理念是什么?