首页 > 解决方案 > 在 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")

欢迎任何建议

标签: pysparkapache-spark-sqlaws-glueamazon-athena

解决方案


您可以为此使用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()

推荐阅读