Apache Spark SQLContext 与 HiveContext 之间有什么区别?

What is the difference between Apache Spark SQLContext vs HiveContext?

Apache Spark SQLContext 和 HiveContext 有什么区别?

一些消息来源说,由于 HiveContext 是 SQLContext 的超集,开发人员应该始终使用比 SQLContext 具有更多功能的 HiveContext。但是目前各个context的API基本相同

Spark 2.0+

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

Spark < 2.0

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

一般来说 window 函数是一个非常酷的特性,可以用于以简洁的方式解决非常复杂的问题,而无需在 RDD 和 DataFrame 之间来回切换。性能仍然远未达到最佳,特别是没有 PARTITION BY 子句,但它确实不是特定于 Spark 的。

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

HiveContext 还提供更强大的 SQL 解析器。参见示例:

最后 HiveContext 需要启动 Thrift 服务器。

HiveContext最大的问题是它有很大的依赖性。

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

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

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

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

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