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
我无法在 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