【问题标题】:Does SparkSession always use Hive Context?SparkSession 是否总是使用 Hive 上下文?
【发布时间】:2017-10-24 21:07:14
【问题描述】:

我可以使用 SparkSession 来获取 Hive 中的表列表,或者访问 Hive 表,如下面的代码所示。现在我的问题是,在这种情况下,我是否将 Spark 与 Hive 上下文一起使用?

还是说要在Spark中使用hive上下文,必须直接使用HiveContext对象来访问表,执行其他Hive相关的功能?

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

【问题讨论】:

    标签: apache-spark hive apache-spark-sql


    【解决方案1】:

    我可以使用 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 感知的。

    【讨论】:

      【解决方案2】:

      在 spark-shell 中,我们也可以使用spark.conf.getAll。该命令将返回 spark session 配置,我们可以看到“spark.sql.catalogImplementation -> hive”提示 Hive 支持。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-29
        • 1970-01-01
        • 1970-01-01
        • 2017-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多