spark sql和DataFrame本质

来源:互联网 发布:java.io.eofexception 编辑:程序博客网 时间:2024/04/29 21:51

一:Spark SQLDataFrame

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

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

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

c) Spark SQL(DataFrameDataSet)不仅是数据仓库的引擎,而是也是数据挖掘的引擎,更为重要的是Spark SQL是数据科学计算和分析引擎!!!

d) 后来的DataFrameSparkSQL)一举成为了大数据计算引擎的技术实现霸主(尤其是在Tungsten的强力支持下)!

e) Hive+Spark SQL+ DataFrame:目前至少是在中国所有的大数据项目至少90%无法逃脱该技术组合

i. Hive:负责廉价的数据仓库存储

ii. Spark SQL:负责高速的计算;

iii. DataFrame:负责复杂的数据挖掘

 

二:DataFrameRDD

1, RPython中都有DataFrameSpark中的DataFrame从形式上看最大的不同点是其天生是分布式的;你可以简单的认为Spark中的DataFrame是一个分布式的Table,形式如下所述:

Name

Age

Tel

String

Int

Long

String

Int

Long

String

Int

Long

 

 

 

String

Int

Long

String

Int

Long

String

Int

Long

 

RDD是形如以下所述:

Person

Person

Person

 

 

Person

Person

Person

2, RDDDataFrame的根本差异:

a) RDD是以Record为单位的,Spark在优化的时候无法东西Record内部的细节,所以也就无法进行更深度的优化,这极大的限制了Spark SQL性能的提升!

b) DataFrame包含了每个RecordMetadata信息,也就是说DataFrame的优化时基于列内部的优化,而不是像RDD一样只能够基于行进行优化;

 

三:Spark SQL企业级最佳实践

第一阶段:最开始阶段文件存储,c代码处理
第二阶段:javaEE加数据库,瓶颈数据库不能分布式(扩展性),企业只能处理局部数据,数据过滤然后在放在数据库中。
第三阶段数据局限导致hive,hive 计算能力有限,速递性能问题
第四阶段:hive 转向sparksql+hive,计算能力是一个问题
第五阶段:hive+Spark SQL+dataFrame
第六阶段:hive+ Spark SQL+dataFrame +dataSet

 

 

 

 

 

0 0
原创粉丝点击