【发布时间】: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