我可以使用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支持。