【问题标题】:Spark HiveContext : Spark Engine OR Hive Engine?Spark HiveContext:Spark 引擎还是 Hive 引擎?
【发布时间】:2017-09-14 06:00:15
【问题描述】:

我正在尝试了解 spark hiveContext。 当我们使用hiveContext 编写查询时,就像

sqlContext=new HiveContext(sc)
sqlContext.sql("select * from TableA inner join TableB on ( a=b) ")

是使用 Spark 引擎还是 Hive 引擎?我相信上面的查询是用 Spark 引擎执行的。但如果是这样的话,为什么我们需要数据框?

我们可以盲目地复制sqlContext.sql("") 中的所有hive 查询并在不使用数据帧的情况下运行。

通过 DataFrames,我的意思是像这样 TableA.join(TableB, a === b) 我们甚至可以使用 SQL 命令执行聚合。任何人都可以澄清这个概念吗?如果使用数据框连接而不是sqlContext.sql() 连接有什么好处? 加入只是一个例子。 :)

【问题讨论】:

  • SQL 是一种查询语言,必须由查询处理器编译。 Dataframe API 是一种(某种)查询语言,对人类来说读/写更复杂,但对查询处理器来说更容易。
  • 请注意,使用 SQL 编写时,某些表达式的处理速度会更快一些,因为 Scala 中的 Lambda 表达式是通过大量样板转换和控件实现的(参见 Spark 峰会最近的演示)。
  • 另请注意,在写入 Hive 表时,SQL INSERT 将确保文件格式严格遵守 Hive 结构,否则情况并非总是如此。

标签: apache-spark spark-dataframe hivecontext


【解决方案1】:

Spark HiveContext 使用 Spark 执行引擎,见 spark code

spark 中的解析器支持是可插拔的,HiveContext 使用 spark 的 HiveQuery 解析器。

从功能上讲,您可以使用 sql 完成所有操作,并且不需要 Dataframe。但是数据框提供了一种方便的方法来实现相同的结果。用户无需编写 SQL 语句。

【讨论】:

  • 所以简而言之,如果我使用“SQL”或“dataFrame”,我可以说“功能和性能方面”没有区别,它只是为了用户方便?并且“SQL”必须通过查询解析器而“Dataframe”不必?
  • @rohan nayak 对
  • 非常感谢您的澄清
猜你喜欢
  • 2015-05-04
  • 1970-01-01
  • 2019-11-12
  • 1970-01-01
  • 1970-01-01
  • 2023-01-11
  • 2017-05-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多