PySpark 访问胶水数据目录

PySpark accessing glue data catalog

我无法在 EMR Hue/Zeppelin 中使用 pySpark 访问 Glue 数据目录中的 table。 emr-5.13.0 和 emr-5.12.1 我都试过了。

我尝试关注 https://github.com/aws-samples/aws-glue-samples/blob/master/examples/data_cleaning_and_lambda.md 但是当尝试导入 GlueContext 时它会出错 No module named awsglue.context.

另一个注意事项是,在执行 spark.sql("SHOW TABLES").show() 时,Hue/Zeppelin 是空的,但是在主节点上使用 pyspark shell 时,我能够看到并查询 table 来自 Glue 数据目录。

非常感谢任何帮助,谢谢!

请查看来自 AWS 的 link 中的详细信息,并查看 EMR 是否按照建议正确配置 (Configure Glue Catalog in EMR)。还要确保授予适当的权限以访问 AWS Glue 目录。详情见附件link。希望这有帮助。

好的,我花了一些时间来模拟这个问题,所以我启动了一个启用了 "Use AWS Glue Data Catalog for table metadata" 的 EMR。启用网络连接后,我在 zeppelin 中发出了一个 show databases 命令,它运行良好。请在此处找到 Zeppelin 的命令和输出:

%spark
spark.sql("show databases").show

+-------------------+
|airlines-historical|
|            default|
|      glue-poc-tpch|
|     legislator-new|
|        legislators|
|      nursinghomedb|
| nycitytaxianalysis|
| ohare-airport-2006|
|           payments|
|              s100g|
|                s1g|
|           sampledb|
|             testdb|
|               tpch|
|           tpch_orc|
|       tpch_parquet|
+-------------------+

至于你的另一个问题“没有名为 awsglue.context 的模块”,我认为使用 EMR 委托的 Zeppelin 可能无法实现。我认为可以访问/使用 awsglue.context 的唯一方法是通过您可能需要在 AWS Glue 中设置的 Glue Devendpoint,然后使用胶水 jupyter 笔记本或本地设置的 Zeppelin 笔记本连接到粘合开发端点。

我不确定是否可以从 EMR 委托的 Zeppelin 笔记本直接访问胶水上下文,也许我错了。

您仍然可以访问粘合目录,因为 EMR 为您提供了相同的选项,因此您可以访问数据库并执行 ETL 作业。

谢谢。

您可以使用以下函数检查 glue 中数据库的可用性

def isDatabasePresent(database_name):
    """
        check if the glue database exists
        :return: Boolean
    """
    client = get_glue_client()
    responseGetDatabases = client.get_databases()
    databaseList = responseGetDatabases['DatabaseList']
    for databaseDict in databaseList:
        if database_name == databaseDict['Name']:
            return True