tla*_*evo 45 hive apache-spark apache-spark-sql
Apache Spark SQLContext和HiveContext有什么区别?
一些消息来源称,由于HiveContext是SQLContext的超集,因此开发人员应始终使用HiveContext,它具有比SQLContext更多的功能.但是每个上下文的当前API大多是相同的.
zer*_*323 38
Spark 2.0+
Spark 2.0提供本机窗口函数(SPARK-8641),并在解析和更好的SQL 2003合规性方面提供了一些额外的改进,因此它显着减少了Hive对实现核心功能的依赖,因此HiveContext(SparkSession使用Hive支持)似乎略微减少重要.
Spark <2.0
显然,如果你想与Hive合作,你必须使用HiveContext.除此之外,目前最大的差异(Spark 1.5)是对窗口功能和访问Hive UDF的能力的支持.
一般来说,窗口函数是一个非常酷的功能,可以用来以简洁的方式解决相当复杂的问题,而无需在RDD和DataFrame之间来回切换.性能仍远未达到最佳状态,尤其是没有PARTITION BY条款,但它实际上并不是Spark特有的.
关于Hive UDF,它现在不是一个严重的问题,但在Spark 1.5之前,许多SQL函数已经使用Hive UDF表达并且需要HiveContext工作.
HiveContext还提供了更强大的SQL解析器.使用select statetment选择数据框中的嵌套列时,请参阅示例:py4j.protocol.Py4JJavaError
最后HiveContext需要启动Thrift服务器.
最大的问题HiveContext是它带有大的依赖性.
当针对 Spark SQL 进行编程时,我们有两个入口点,具体取决于我们是否需要 Hive 支持。建议的入口点是 HiveContext,以提供对 HiveQL 和其他依赖于 Hive 的功能的访问。更基本的 SQLContext 提供了不依赖于 Hive 的 Spark SQL 支持的子集。
- 对于可能与包含所有 Hive 依赖项发生冲突的用户来说,存在分离。
- SQLContext 中没有的 HiveContext 的其他功能包括使用更完整的 HiveQL 解析器编写查询的能力、访问 Hive UDF 以及从 Hive 表读取数据的能力。
-使用 HiveContext 不需要现有的 Hive 设置。