【问题标题】:What is the difference between Apache Spark SQLContext vs HiveContext?Apache Spark SQLContext 与 HiveContext 有什么区别?
【发布时间】:2015-11-12 07:49:10
【问题描述】:

Apache Spark SQLContext 和 HiveContext 有什么区别?

一些消息来源说,由于 HiveContext 是 SQLContext 的超集,因此开发人员应始终使用具有比 SQLContext 更多功能的 HiveContext。但目前每个上下文的 API 大多是相同的。

  • SQLContext/HiveContext 更有用的场景有哪些?
  • HiveContext 是否仅在使用 Hive 时更有用?
  • SQLContext 是否就是使用 Apache Spark 实现大数据应用程序所需的全部?

【问题讨论】:

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


    【解决方案1】:

    Spark 2.0+

    Spark 2.0 提供本机窗口函数 (SPARK-8641),并在解析方面进行了一些额外的改进,并具有更好的 SQL 2003 合规性,因此它对 Hive 实现核心功能的依赖显着减少,因此 HiveContext (SparkSession在 Hive 支持下)似乎不太重要。

    火花

    显然,如果您想使用 Hive,您必须使用 HiveContext。除此之外,目前 (Spark 1.5) 的最大区别是支持 window functions 和访问 Hive UDF 的能力。

    一般来说,窗口函数是一个非常酷的特性,可以用来以简洁的方式解决相当复杂的问题,而无需在 RDD 和 DataFrame 之间来回切换。性能仍远未达到最佳状态,尤其是在没有 PARTITION BY 子句的情况下,但它确实与 Spark 无关。

    关于 Hive UDF,现在这不是一个严重的问题,但在 Spark 1.5 之前,许多 SQL 函数已经使用 Hive UDF 表达并且需要HiveContext 才能工作。

    HiveContext 还提供了更强大的 SQL 解析器。例如:py4j.protocol.Py4JJavaError when selecting nested column in dataframe using select statetment

    最后HiveContext 是启动 Thrift 服务器所必需的。

    HiveContext 最大的问题是它的依赖关系很大。

    【讨论】:

    • 从您的评论看来,HiveContext 唯一的缺点是它的依赖关系很大。除此之外,始终使用 HiveContext 而不是 SqlContext 是否安全。我正在运行 SparkR 1.6 环境。
    • 来自jaceklaskowski.gitbooks.io/mastering-apache-spark/content/… "SparkSession 已在 Spark 2.0 中将 SQLContext 和 HiveContext 合并到一个对象中。"
    • 在工程上下文中,最重要的是要考虑包含“enableHiveSupport()”将使用配置单元 JAR 启动本地 thrift 服务器(通常在端口 10000 上),该服务器将使用以下方式与 metastoreDB 通信hive-site.xml 中的 javax 连接参数。
    【解决方案2】:

    当针对 Spark SQL 进行编程时,我们有两个入口点,具体取决于 我们是否需要 Hive 支持。推荐的入口点是 HiveContext 提供对 HiveQL 和其他 Hive 相关功能的访问。更基础的 SQLContext 提供了 Spark SQL 支持的一个子集,它不依赖于 蜂巢。

    -对于可能与包含所有内容有冲突的用户存在分隔 Hive 依赖项。

    -SQLContext 中没有的 HiveContext 的其他功能包括使用更完整的 HiveQL 解析器编写查询的能力、对 Hive UDF 的访问以及从 Hive 表中读取数据的能力。

    -使用 HiveContext 不需要现有的 Hive 设置。

    【讨论】:

    【解决方案3】:

    HiveContext 仍然是 sqlcontext 的超集,它包含一些额外的属性,例如它可以从 hive-site.xml 读取配置,以防你有 hive 使用,否则只需使用 sqlcontext

    【讨论】:

    • 能否使用 swlContext 设置 hive.exec.dynamic.partition=true 等 hive 属性?
    猜你喜欢
    • 2016-06-23
    • 2016-06-05
    • 1970-01-01
    • 2017-08-27
    • 2014-06-24
    • 1970-01-01
    • 2017-12-01
    • 2018-08-14
    • 2015-12-05
    相关资源
    最近更新 更多