为什么在spark-sql中可以使用spark core API(RDD)时可以使用它

Gau*_*hah 1 scala apache-spark apache-spark-sql

我正在学习大数据处理的火花.人们建议使用HiveContext结束SparkSqlContext.并建议使用dataframes而不是直接使用rdd.

Spark-sql对于查询规划器来说似乎是高度优化的,所以看起来使用spark-sql比通过scala(或python ...)使用Core api(RDD)更好.有什么我想念的吗?

Tza*_*har 9

简短的回答:对,大多数用例建议使用spark-sql.

答案越长:

首先,它不是"Scala vs. spark-sql"的问题,而是"Spark Core API(RDDs)与spark-sql"的问题.该语言的选择是正交的这场辩论:有斯卡拉的API(以及Java和Python API)的两个RDDS和火花-SQL,所以你可能会结合使用Scala的火花-SQL,例如:

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 ...")
Run Code Online (Sandbox Code Playgroud)

所以 - 是的,使用SQL编写大部分"繁重工具"是有意义的,但是会有一些Scala(或Java或Python)代码.

现在,至于"RDD与SQL"问题 - 如上所述,通常建议使用SQL,因为它为Spark提供了优化空间,不像RDD操作,开发人员指示Spark确切地做什么以及如何通过对Spark的引擎不透明的转换.