当你可以在 spark-sql 中完成大部分工作时,为什么要使用 spark core API (RDD)
why use spark core API (RDD) when you can do most of it in spark-sql
我正在学习大数据处理的spark。人们建议使用 HiveContext
而不是 SparkSqlContext
。并且还建议使用 dataframes
而不是直接使用 rdd
.
Spark-sql 似乎针对查询规划器进行了高度优化,因此使用 spark-sql 似乎比通过 scala 使用 Core api (RDD) 更好(或 python...) 。有什么我想念的吗?
简短的回答:正确,对于大多数用例,建议使用 spark-sql。
较长的答案:
首先,这不是"Scala vs. spark-sql"的问题,而是"Spark Core API (RDDs) vs. spark-sql"的问题。 语言的选择与这场辩论是正交的:RDD和spark-[=31=都有Scala API(以及Java和Python API) ],因此您可能会结合 spark-sql 使用 Scala,例如:
val sc: SparkContext // An existing SparkContext.
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
val df = sqlContext.read.json("people.json").registerTempTable("t1")
sqlContext.sql("SELECT * FROM t1 WHERE ...")
所以 - 是的,使用 SQL 编写大部分 "heavy lifting" 是有意义的,但会有一些 Scala(或 Java,或 Python ) 代码围绕它。
现在,关于"RDD vs. SQL"的问题——如前所述,通常建议使用SQL,因为它给Spark留有优化的空间,不像RDD操作是开发者指导Spark确切地做什么和如何,传递对 Spark 引擎不透明的转换。
我正在学习大数据处理的spark。人们建议使用 HiveContext
而不是 SparkSqlContext
。并且还建议使用 dataframes
而不是直接使用 rdd
.
Spark-sql 似乎针对查询规划器进行了高度优化,因此使用 spark-sql 似乎比通过 scala 使用 Core api (RDD) 更好(或 python...) 。有什么我想念的吗?
简短的回答:正确,对于大多数用例,建议使用 spark-sql。
较长的答案:
首先,这不是"Scala vs. spark-sql"的问题,而是"Spark Core API (RDDs) vs. spark-sql"的问题。 语言的选择与这场辩论是正交的:RDD和spark-[=31=都有Scala API(以及Java和Python API) ],因此您可能会结合 spark-sql 使用 Scala,例如:
val sc: SparkContext // An existing SparkContext.
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
val df = sqlContext.read.json("people.json").registerTempTable("t1")
sqlContext.sql("SELECT * FROM t1 WHERE ...")
所以 - 是的,使用 SQL 编写大部分 "heavy lifting" 是有意义的,但会有一些 Scala(或 Java,或 Python ) 代码围绕它。
现在,关于"RDD vs. SQL"的问题——如前所述,通常建议使用SQL,因为它给Spark留有优化的空间,不像RDD操作是开发者指导Spark确切地做什么和如何,传递对 Spark 引擎不透明的转换。