第56课:揭秘Spark SQL和DataFrame的本质

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/someby/article/details/83421464

一、SparkSQL与DataFrame
  SparkSQL之所以是除了Spark Core以外最大和最受关注的组件,原因是:
    a)处理一切存储介质和各种格式的数据(同时可以方便的扩展SparkSQL的功能来支持更多类型的数据,例如Kudu);
    b)SparkSQL把数据仓库的计算能力推向了新的高度,不仅是无敌的计算速度(SparkSQL比Shark快了至少一个数量级,而Shark比Hive快了至少一个数量级,尤其是在Tungsten成熟以后,会更加无可匹敌),更为重要的是把数据仓库的计算复杂度推向了历史的高度,(SparkSQL后续的dataframe可以让数据仓库直接使用机器学习、图计算等复杂的算法库来对数据仓库进行复杂深度数据价值的挖掘);
    c)SparkSQL(DataFrame,DataSet)不仅是数据仓库的引擎,同时也是数据挖掘的引擎,更为重要的是SparkSQL是科学计算和分析的引擎!!!
    d)后来的DataFrame让Spark(SQL)一举成为了大数据计算引擎的技术实现了霸主(尤其是在Tungsten的强力支持下)!
    e)Hive+SparkSQL+DataFrame:目前至少是大数据项目无法逃脱该技术组合
        Hive:负责廉价的数据仓库存储
        SparkSQL:负责高速的计算
        DataFrame:负责负责的数据挖掘
二、DataFrame与RDD
    1.R和Python语言中都有DataFrame,Spark中的DataFrame从形式上看最大的不同点是其天生是分布式的,可以简单的认为Spark中的Dataframe是一个分布式的Table,

     形式如下:
  

    而RDD是形如:


    即RDD是一条条的数据。
    2.RDD和DataFrame的根本差异:
        a)RDD是以Record为单位的,Spark在优化的时候无法洞悉Record内部的细节,所以无法进行更深度的优化,这极大的限制了SparkSQL性能的提升!
        b)DataFrame包含了每个Record的Metadata信息,也就是说DataFrame的优化是基于列内部的优化,而不是像RDD一样只能够基于行进行优化;
三、SparkSQL企业级最佳实践
    第一阶段:最开始阶段文件存储,C代码处理;
    第二阶段:JavaEE+数据库,瓶颈数据库不能分布式(扩展性),企业中能处理局部数据,数据过滤然后在放在数据库中;
    第三阶段:数据局限性导致Hive计算能力是一个问题;
    第四阶段:Hive转向SparkSQl+Hive,计算能力是一个问题;
    第五阶段:Hive+SparkSQL+dataFrame;
    第六阶段:Hive+SparkSQL+DataFrame+DataSet

猜你喜欢

转载自blog.csdn.net/someby/article/details/83421464