必看!Spark 进阶之路之「SparkSQL」入门概述
云栖号:https://yqh.aliyun.com
第一手的上云资讯,不同行业精选的上云企业案例库,基于众多成功案例萃取而成的最佳实践,助力您上云决策!
在之前的文章中,我们已经完成了对于Spark核心SparkCore的详细介绍。而今天想为为大家介绍的是SparkSQL的概述。
什么是Spark SQL?
Spark SQL是Spark用来处理结构化数据的一个模块,它提供了2个编程抽象:DataFrame和DataSet,并且作为分布式SQL查询引擎的作用。
我们已经学习了Hive,它是将Hive SQL转换成MapReduce然后提交到集群上执行,大大简化了编写MapReduc的程序的复杂性,由于MapReduce这种计算模型执行效率比较慢。所有Spark SQL的应运而生,它是将Spark SQL转换成RDD,然后提交到集群执行,执行效率非常快!
Spark SQL的特点
1)易整合
2)统一的数据访问方式
3)兼容Hive
4)标准的数据连接
什么是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的查询优化器正是这样做的。
简而言之,逻辑查询计划优化就是一个利用基于关系代数的等价变换,将高成本的操作替换为低成本操作的过程。
什么是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对象和类对象之间的类比。
本次分享就到这里,你还有什么想知道的或者对本文有什么建议,欢迎在评论区告诉我们!
云栖号:https://yqh.aliyun.com
第一手的上云资讯,不同行业精选的上云企业案例库,基于众多成功案例萃取而成的最佳实践,助力您上云决策!
原文发布时间:2020-03-04
本文作者:Alice菌
本文来自:“CSDN云计算”,了解相关信息可以关注“CSDN云计算”
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
使用CLONE TABLE方式实现同region不同可用区的MaxCompute之间的数据迁移
该文章主要针对于用户同region不同账户之间的MaxCompute数据迁移方式,属于迁移的方式可以有三种方式,一、添加MaxCompute数据源的方式进行数据迁移(该方式针对多个表配置同步节点较为繁琐);二、使用tunnel方式结合代码进行数据的迁移;三、使用clone table进行MaxCompute数据到另一MaxCompute之间的数据迁移。本案例主要介绍Clone table功能,Clone table跨账号进行同步数据,需要所做的添加对应的主账户到对应的项目空间,并且赋予有对应创建表权限的用户,最后实现不同MaxCompute之间的Clone table功能。 背景:针对用户在不同MaxCompute之间进行数据迁移,使用三种方式的第一种、第二种进行数据的迁移造成了很多用户操作繁琐,在这里给大家带来一篇实践不同账号Cl
- 下一篇
阿里云视觉智能开放平台【人脸人体类目】上线多个AI能力,快来了解下!
尊敬的开发者您好,感谢您对阿里云视觉智能平台的支持,近期人脸人体类目上线了五个算法能力,分别是口罩检测、人脸活体检测、表情识别、公众人脸识别以及人体计数,接下来给您逐一介绍下。 口罩检测:【跳转链接】由于疫情原因,在二月我们紧急上线了此能力,通过此能力可以识别输入图片中占比最大的人脸是否有戴口罩,可应用在对各种场所的人员口罩佩戴情况进行监测。 人脸活体检测:【跳转链接】识别输入图片中的活体对象(主要是人脸),用来检测是来自直接拍摄还是翻拍。可应用在互联网金融、税务、社保、电信、医疗等行业。 表情识别:【跳转链接】识别图片中的人脸表情, 表情种类为:neutral(中性), happiness(高兴), surprise(惊讶), sadness(伤心), anger(生气), disgust(厌恶), fear(害怕)。可应用在心理学、智能监控、虚拟现实及合成动画等领域。 公众人脸识别:【跳转链接】识别输入图片中的一个或多个公众人脸信息。可用于公众人物鉴定,例如检测发布的内容是否有侵犯肖像权。 人体计数:【跳转链接】识别输入图片中的人体数量。可用于人数统计,例如合照人数、班级人数等...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- 设置Eclipse缩进为4个空格,增强代码规范
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6