Spark之【SparkSQL】入门概述

举报
大数据梦想家 发表于 2021/09/29 01:26:17 2021/09/29
1.9k+ 0 0
【摘要】         先让我们来回顾一下Spark的内置模块。      &nb...

        先让我们来回顾一下Spark的内置模块
在这里插入图片描述        在之前的博客分享中,博主已经完成了对于Spark核心SparkCore的一个详细介绍。在接下来的几篇博客分享中,博主将为大家介绍的是SparkSQL。本篇,首先为大家介绍的是SparkSQL的概述

        码字不易,先赞后看,养成习惯!
在这里插入图片描述


SparkSQL概述

1. 什么是SparkSQL?

        Spark SQL是Spark用来处理结构化数据的一个模块,它提供了2个编程抽象:DataFrameDataSet,并且作为分布式SQL查询引擎的作用。
        
        我们已经学习了Hive,它是将Hive SQL转换成MapReduce然后提交到集群上执行,大大简化了编写MapReduc的程序的复杂性,由于MapReduce这种计算模型执行效率比较慢。所有Spark SQL的应运而生,它是将Spark SQL转换成RDD,然后提交到集群执行,执行效率非常快!

2.Spark SQL的特点

1)易整合
在这里插入图片描述

2)统一的数据访问方式
在这里插入图片描述

3)兼容Hive

在这里插入图片描述
4)标准的数据连接
在这里插入图片描述

3. 什么是DataFrame?

        与RDD类似,DataFrame也是一个分布式数据容器。然而DataFrame更像传统数据库的二维表格,除了数据以外,还记录数据的结构信息,即schema。同时,与Hive类似,DataFrame也支持嵌套数据类型(struct、array和map)。从API易用性的角度上看,DataFrame API提供的是一套高层的关系操作,比函数式的RDD API要更加友好,门槛更低。
在这里插入图片描述
        上图直观地体现了DataFrame和RDD的区别。左侧的RDD[Person]虽然以Person为类型参数,但Spark框架本身不了解Person类的内部结构。而右侧的DataFrame却提供了详细的结构信息,使得Spark SQL可以清楚地知道该数据集中包含哪些列,每列的名称和类型各是什么。DataFrame是为数据提供了Schema的视图。可以把它当做数据库中的一张表来对待,DataFrame也是懒执行的。性能上比RDD要高,主要原因:

        优化的执行计划:查询计划通过Spark catalyst optimiser(Spark的优化器)进行优化。
在这里插入图片描述
比如下面一个例子:
在这里插入图片描述
在这里插入图片描述
         为了说明查询优化,我们来看上图展示的人口数据分析的示例。图中构造了两个DataFrame,将它们join之后又做了一次filter操作。如果原封不动地执行这个执行计划,最终的执行效率是不高的。因为join是一个代价较大的操作,也可能会产生一个较大的数据集。如果我们能将filter下推到 join下方,先对DataFrame进行过滤,再join过滤后的较小的结果集,便可以有效缩短执行时间。而Spark SQL的查询优化器正是这样做的。简而言之,逻辑查询计划优化就是一个利用基于关系代数的等价变换,将高成本的操作替换为低成本操作的过程。

4.什么是DataSet?

1)是Dataframe API的一个扩展,是Spark最新的数据抽象

2)用户友好的API风格,既具有类型安全检查也具有Dataframe的查询优化特性。

3)Dataset支持编解码器,当需要访问非堆上的数据时可以避免反序列化整个对象,提高了效率。

4)样例类被用来在Dataset中定义数据的结构信息,样例类中每个属性的名称直接映射到DataSet中的字段名称。

5)Dataframe是Dataset的特列,DataFrame=Dataset[Row] ,所以可以通过as方法将Dataframe转换为Dataset。Row是一个类型,跟Car、Person这些的类型一样,所有的表结构信息我都用Row来表示。

6)DataSet是强类型的。比如可以有Dataset[Car],Dataset[Person]

7)DataFrame只是知道字段,但是不知道字段的类型,所以在执行这些操作的时候是没办法在编译的时候检查是否类型失败的,比如你可以对一个String进行减法操作,在执行的时候才报错,而DataSet不仅仅知道字段,而且知道字段类型,所以有更严格的错误检查。就跟JSON对象和类对象之间的类比。


        好了,本次的分享就到这里,对大数据技术感兴趣的朋友无妨点个赞支持一下哟,下一篇博客将为大家介绍的是SparkSQL编程 , 敬请期待!

        
在这里插入图片描述

文章来源: alice.blog.csdn.net,作者:大数据梦想家,版权归原作者所有,如需转载,请联系作者。

原文链接:alice.blog.csdn.net/article/details/104586857

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。