gpt4 book ai didi

apache-spark - EMR 上的 PySpark(步骤/作业)无法连接到 AWS Glue 数据目录,但 Zeppelin 可以

转载 作者:行者123 更新时间:2023-12-05 04:00:21 25 4
gpt4 key购买 nike

我已经设置了一个启用了 Data Catalog 的 EMR 集群

enter image description here

我可以在使用 Zeppelin 时访问数据目录,但是我提交的作业/步骤如下:

aws emr add-steps --cluster-id j-XXXXXX --steps "Type=spark,Name=Test,Args=[--deploy-mode,cluster,--master,yarn,--conf,spark.yarn.submit.waitAppCompletion=false,--num-executors,2,--executor-cores,2,--executor-memory,8g,s3://XXXXXX/emr-test.py],ActionOnFailure=CONTINUE"

当我使用 spark.sql("USE xxx")spark.sql("SHOW DATABASES") 时,我看不到我的数据目录,这是为什么。

from pyspark import SparkContext
from pyspark.sql import SparkSession

sc = SparkContext()
spark = SparkSession \
.builder \
.appName("Test") \
.config("hive.metastore.client.factory.class", "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory") \
.getOrCreate()

spark.sql("USE ...")
spark.sql("SHOW TABLES").show()
spark.sql("SELECT querydatetime FROM flights LIMIT 10").show(10)

sc.stop()

我得到类似的东西:

pyspark.sql.utils.AnalysisException: u"Database 'xxxxxx' not found;"

最佳答案

我从https://michael.ransley.co/2018/08/28/spark-glue.html发现那个

To access the tables from within a Spark step you need to instantiate the spark session with the glue catalog:

spark = SparkSession.builder \
.appName(job_name) \
.config("hive.metastore.client.factory.class", "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory") \
.enableHiveSupport() \
.getOrCreate()
spark.catalog.setCurrentDatabase("mydatabase")

我缺少行 .enableHiveSupport()。很不幸,这似乎没有记录在官方文档中......

关于apache-spark - EMR 上的 PySpark(步骤/作业)无法连接到 AWS Glue 数据目录,但 Zeppelin 可以,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56289022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com