3 hive apache-spark apache-spark-sql
我可以使用 SparkSession 获取 Hive 中的表列表,或者访问 Hive 表,如下面的代码所示。现在我的问题是,在这种情况下,我是否将 Spark 与 Hive Context 一起使用?
或者是要在 Spark 中使用 Hive 上下文,我必须直接使用 HiveContext 对象来访问表,并执行其他 Hive 相关功能?
spark.catalog.listTables.show
val personnelTable = spark.catalog.getTable("personnel")
Run Code Online (Sandbox Code Playgroud)
我可以使用 SparkSession 获取 Hive 中的表列表,或者访问 Hive 表,如下面的代码所示。
是的你可以!
现在我的问题是,在这种情况下,我是否将 Spark 与 Hive Context 一起使用?
这取决于你如何创造spark价值。
SparkSession有enableHiveSupportBuilder方法自带的接口。
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-aware SparkSession(事实上,您不需要此方法,因为您负责创建实例,SparkSession因此您应该了解您的 Spark 应用程序的作用)。
在给定SparkSession实例(例如spark-shellDatabricks)的环境中,检查特定实例是否启用了 Hive 支持的唯一方法SparkSesssion是查看目录实现的类型。
scala> spark.sessionState.catalog
res1: org.apache.spark.sql.catalyst.catalog.SessionCatalog = org.apache.spark.sql.hive.HiveSessionCatalog@4aebd384
Run Code Online (Sandbox Code Playgroud)
如果您看到HiveSessionCatalog已使用,则该SparkSession实例是 Hive 感知的。
| 归档时间: |
|
| 查看次数: |
3200 次 |
| 最近记录: |