aws 胶水 HiveContext 访问胶水 DataCatalog

Posted

技术标签:

【中文标题】aws 胶水 HiveContext 访问胶水 DataCatalog【英文标题】:aws glue HiveContext access glue DataCatalog 【发布时间】:2020-02-10 16:37:04 【问题描述】:

我可以从具有glueContext 的粘合作业中读取在粘合数据目录中定义的表。 但是,如果我想使用 hiveContext 读取完全相同的表,我会收到一条错误消息,指出它找不到该表。

在我看来,HiveContext 无法访问粘合数据目录。

你知道在胶水作业配置中插入什么(编辑作业->作业参数->“--conf xyz”)以确保HiveContext可以找到和访问胶水数据目录中的表吗?

我想执行以下代码:

# import libs    
from pyspark.context import SparkContext    
from pyspark.sql.functions import *
from pyspark.sql.types import *
from pyspark.sql import HiveContext

# create sparkContext and HiveContext
sc = SparkContext() 
hc = HiveContext(sc)

# read table from glue data catalogue
df = hc.table('glue_db.glue_table').persist()

上面的代码返回如下错误信息:

pyspark.sql.utils.AnalysisException: u"找不到表或视图:glue_db.glue_table;;\n'UnresolvedRelation glue_db.glue_table\n"

我已经尝试过 spark2.2 和 spark2.4 的 spark 版本

非常感谢!

【问题讨论】:

我在使用最新版本的 EMR 时遇到了这样的问题。我不得不回到 5.26.0。我不确定你的情况,但试试看。 【参考方案1】:

试试这个

from awsglue.context import GlueContext

glueContext = GlueContext(sc)
spark = glueContext.spark_session
df= spark.sql(“select * from glue.table”)

或者直接从创建你的 spark 会话开始并完全绕过胶水。

只要您选中了允许将胶水目录用作 hive 元存储的框

【讨论】:

以上是关于aws 胶水 HiveContext 访问胶水 DataCatalog的主要内容,如果未能解决你的问题,请参考以下文章

如何在 aws 胶水中设置特定的压缩值?如果可能,可以在 aws 胶水中手动确定压缩级别和分区吗?

使用 pyspark 和 aws 胶水进行数据转置

使用 pyspark aws 胶水时显示 DataFrame

如何使用 pyspark 从 aws 胶水的时间戳中提取年份

无法将 aws 胶水动态帧转换为火花数据帧

在 aws 胶水中使用 transformation_ctx 是啥?