首页 文章

Apache Spark SQLContext和HiveContext有什么区别?

提问于
浏览
43

Apache Spark SQLContext和HiveContext有什么区别?

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

  • SQLContext / HiveContext更有用的场景是什么?

  • 只有在使用Hive时,HiveContext才更有用吗?

  • 或者SQLContext是否是使用Apache Spark实现大数据应用程序所需的全部内容?

3 回答

  • 36

    Spark 2.0+

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

    Spark < 2.0

    显然,如果你想使用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 的最大问题是它带有大的依赖性 .

  • 3

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

    • 对于可能与包含所有Hive依赖项存在冲突的用户存在分离 .

    • 在SQLContext中找不到的HiveContext的附加功能包括使用更完整的HiveQL解析器编写查询,访问Hive UDF以及从Hive表读取数据的功能 .

    • 使用HiveContext不需要现有的Hive设置 .

  • 3

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

相关问题