我可以使用 SparkSession 来获取 Hive 中的表列表,或者访问 Hive 表,如下面的代码所示。
是的,你可以!
现在我的问题是,在这种情况下,我是否将 Spark 与 Hive 上下文一起使用?
这取决于您如何创建 spark 值。
SparkSession 具有Builder 接口,带有enableHiveSupport 方法。
enableHiveSupport(): Builder 启用 Hive 支持,包括连接到持久 Hive 元存储、支持 Hive serdes 和 Hive 用户定义的函数。
如果您使用该方法,则您已获得 Hive 支持。如果没有,那么,你没有它。
您可能认为spark.catalog 与 Hive 有某种关联。好吧,它是为了提供 Hive 支持,但默认情况下目录是 in-memory。
目录:目录用户可以通过该接口创建、删除、更改或查询底层数据库、表、函数等。
spark.catalog 只是 Spark SQL 附带两个实现的接口 - in-memory(默认)和 hive。
现在,你可能会问自己这个问题:
有没有办法,比如通过 spark.conf,来查明是否启用了 hive 支持?
我知道没有 isHiveEnabled 方法或类似方法,您可以使用它来了解您是否使用 Hive 感知 SparkSession (事实上,您不需要此方法,因为您是负责创建SparkSession 实例,因此您应该知道您的 Spark 应用程序是做什么的。
在为您提供 SparkSession 实例(例如 spark-shell 或 Databricks)的环境中,检查特定 SparkSesssion 是否启用 Hive 支持的唯一方法是查看目录实现的类型.
scala> spark.sessionState.catalog
res1: org.apache.spark.sql.catalyst.catalog.SessionCatalog = org.apache.spark.sql.hive.HiveSessionCatalog@4aebd384
如果您看到使用了 HiveSessionCatalog,则表明 SparkSession 实例是 Hive 感知的。