揭秘Spark SQL和DataFrame的本质1、Spark SQL与DataFrame 2、DataFrame与RDD 3、企业级最佳实践 一、SparkSQL与DataFrame 1、SparkSQL之所以是除了SparkCore以外最大的和最受关注的组件,原因是 a)处理一切存储介质和各种格式的数据(同时可以方便的扩展Spake SQL的功能来支持更多类型的数据,例如Kudu) b)Spark SQL把数据仓库的计算能力推向了新的高度,不仅是无敌的计算速度(Spark SQL比Shark快了至少一个数量级,而Shark比Hive快了至少一个数量级,尤其是在Tunsten成熟以后会更加无可匹敌),更为重要的是把数据仓库的计算的复杂度推向了历史上全新的高度(Spark SQL后续推出的DataFrame可以让数据仓库直接使用机器学习、图计算等复杂的算法库来对数据仓库进行复杂的深度数据价值的挖掘); c)Spark SQL(DataFrame、DataSet)不仅是数据仓库的引擎,同时也是数据挖掘的引擎,更为重要的是,Spark SQL是数据科学计算和分析的引擎 d)后来的DataFrame让Spark(SQL)一举成为了大数据计算引擎的技术实现霸主(尤其是在Tungsten的强力支持下) e)Hive(底层廉价、便捷的存储)+Spark SQL(高速的计算)+DataFrame(复杂的数据挖掘) 二、DataFrame与RDD 1、R和Python中都有DataFrame,Spark中的DataFrame从形式上看最大的不同点是其天生是分布式的;可以简单的认为Spark中的DataFrame是一个分布式的Table,形式如下: Name Age Tel String int long String int long String int long 而RDD是形如以下所示: Person Person Person 2、RDD和DataFrame的根本差异: a)RDD是以Record为单位的,Spark在优化的时候无法洞悉Record内部的细节,所以也就无法进行更深度的优化,这极大地限制了Spark SQL性能的提升。 B)DataFrame包含了每个Record的MetaData信息,也就是说DataFrame的优化是基于列内部的优化,而不是像RDD一样,只能够基于行进行优化 RDD中Spark框架无法优化Person内部。而DataFrame带有具体每条数据的Schema元数据信息,每一列都带有名称和类型。这样Spark SQL可以基于每一列的元数据信息,对DataFrame背后的数据源进行更加细粒度的分析,在这之上进行进一步的优化。 三、Spark SQL企业级最佳实践 第一阶段:文件存储,c代码处理 第二阶段:JavaEE+数据库,瓶颈是数据库不能分布式(扩展性),企业只能处理局部数据,数据过滤然后再放在数据库中。 第三阶段:数据局限导致Hive,Hive计算能力有限,速度性能问题 第四阶段:Hive转向Spark SQL+Hive,计算能力是一个问题 第五阶段:Hive+Spark SQL+DataFrame 第六阶段:Hive+Spark SQL+DataFrame+DataSet
|