SparkSession是否始终使用配置单元上下文



我可以使用SparkSession获取配置单元中的表列表,或者访问如下代码所示的配置单元表。现在我的问题是,在这种情况下,我是否使用带有Hive Context的Spark?

还是说,要在Spark中使用配置单元上下文,我必须直接使用HiveContext对象来访问表,并执行其他与配置单元相关的功能?

spark.catalog.listTables.show
val personnelTable = spark.catalog.getTable("personnel")

我可以使用SparkSession获取配置单元中的表列表,或者访问如下代码所示的配置单元表。

是的,你可以!

现在我的问题是,在这种情况下,我是否使用带有Hive Context的Spark?

这取决于您如何创建spark值。

SparkSession具有带有enableHiveSupport方法的Builder接口。

enableHiveSupport():Builder启用配置单元支持,包括连接到持久配置单元元存储、支持配置单元序列和配置单元用户定义函数。

如果您使用了该方法,您就得到了配置单元的支持。如果没有,那么,你没有。

你可能认为spark.catalog在某种程度上与Hive有关。好吧,它本来打算提供Hive支持,但默认情况下目录是in-memory

目录:目录用户可以创建、删除、更改或查询底层数据库、表、函数等的接口。

spark.catalog只是Spark SQL附带的两个接口——in-memory(默认)和hive

现在,你可能会问自己这个问题:

是否有任何方法,例如通过spark.conf,来了解是否已启用配置单元支持?

据我所知,没有isHiveEnabled方法或类似方法可以用来判断您是否使用支持配置单元的SparkSession(事实上,您不需要这个方法,因为您负责创建SparkSession实例,所以您应该知道Spark应用程序的功能)。

在给定SparkSession实例(例如spark-shell或Databricks)的环境中,检查特定SparkSesssion是否启用了配置单元支持的唯一方法是查看目录实现的类型。

scala> spark.sessionState.catalog
res1: org.apache.spark.sql.catalyst.catalog.SessionCatalog = org.apache.spark.sql.hive.HiveSessionCatalog@4aebd384

如果您看到使用了HiveSessionCatalog,则SparkSession实例是Hive感知的。

在spark shell中,我们也可以使用spark.conf.getAll。该命令将返回spark会话配置,我们可以看到"spark.sql.catalogImplementation->hive"建议hive支持。

相关内容

  • 没有找到相关文章

最新更新