一、Spark SQL与Dataframe

Spark SQL之所以是除Spark core以外最大和最受关注的组件的原因:

a) 能处理一切存储介质和各种格式的数据(你同时可以方便的扩展Spark SQL的功能来支持更多的数据类型,例如KUDO)

b)Spark SQL 把数据仓库的计算能力推向了一个新的高度。不仅是无敌的计算速度(Spark SQL比Shark快了一个数量级,Shark比Hive快了一个数量级),尤其是在tungsten成熟以后会更加无可匹敌。更为重要的是把数据仓库的计算复杂度推向了历史新高度(Spark后续推出的Dataframe可以让数据仓库直接使用机器学习、图计算等算法库来对数据仓库进行深度数据价值的挖掘)。

c)Spark SQL(Dataframe,DataSet)不仅是数据仓库的引擎,同时也是数据挖掘的引擎,更为重要的是Spark SQL是科学计算和分析的引擎。

d)后来的DataFrame让Spark SQL一举成为大数据计算引擎的技术上的霸主(尤其是在钨丝计划的强力支持下)。

e) Hive+Spark SQL+DataFrame

 1) Hive负责廉价的数据存储

 2) Spark SQL 负责高速的计算

 3)DataFrame 负责复杂的数据挖掘


二、DataFrame与RDD

a)R和Python中都有DataFrame,Spark中的DataFrame从形式上看,最大的不同点就是其天生是分布式的;你可以简单的认为DataFrame是一个分布式的Table,形式如下:

NameAgeTel
StringIntLong
StringIntLong
StringIntLong
StringIntLong
StringIntLong
StringIntLong

而RDD的形式如下:

Person
Person
Person
Person
Person
Person

RDD不知道数据行的属性,而DataFrame知道数据的列信息

b)RDD和DataFrame的根本差异

  RDD以record为基本单位,Spark在处理RDD时无法优化RDD的内部细节,所以也就无法进行更深入的优化,这极大的限制了Spark SQL的性能。

 DataFrame中包含了每个record的metadata信息,也就是说DataFrame优化时基于列内部优化,而不像RDD基于行进行优化。


三、Spark企业级最佳实践

阶段1 文件系统+C语言处理

阶段2 JavaEE + 传统数据库(扩展性太差,不支持分布式。即便有部分数据库支持分布式,但是因为事务一致性的关系,速度非常慢)

阶段3 Hive hive的计算能力有限,速度非常慢。

阶段4 Hive转向Hive+Spark SQL 

阶段5 Hive+Spark SQL+DataFrame

阶段6 Hive+Spark SQL+DataFrame+DataSet