Spark SQL、DataFrame、DataSet是什么

news2024/12/26 2:32:09

在很多情况下,开发人员并不了解Scala语言,也不了解Spark常用的API,但又非常想要使用Spark框架提供的强大的数据分析能力。Spark的开发工程师们考虑到了这个问题,于是利用SQL语言的语法简洁、学习门槛低以及在编程语言中普及程度和流行程度高等诸多优势,开发了Spark SQL模块。通过Spark SQL,开发人员能够使用SQL语句实现对结构化数据的处理。

本节主要介绍什么是Spark SQL、Spark SQL的特点、什么是DataFrame和什么是DataSet。

4.1.1  什么是Spark SQL

Spark SQL是Spark用于结构化数据(Structured Data)处理的Spark模块。与基本的Spark RDD API不同,Spark SQL的抽象数据类型为Spark提供了关于数据结构和正在执行的计算的更多信息。在内部,Spark SQL使用这些额外的信息去做一些优化。

有多种方式与Spark SQL进行交互,比如SQL和Dataset API。当计算结果的时候,这些接口使用相同的执行引擎,不依赖正在使用哪种API或者语言。这种统一也就意味着开发者可以很容易在不同的API之间进行切换,这些API提供了最自然的方式来表达给定的转换。

Hive是将Hive SQL转换成MapReduce,然后提交到集群上执行,大大简化了编写MapReduce程序的复杂性,但是MapReduce这种计算模型执行效率比较慢,所以Spark SQL应运而生,它将Spark SQL转换成RDD,然后提交到集群上执行,执行效率非常高。

Spark SQL提供了以下2个编程抽象,类似Spark Core中的RDD。

  1. DataFrame。
  2. DataSet。

4.1.1  Spark SQL的特点

(1)Integrated(易整合):Spark SQL无缝地整合了SQL查询和Spark编程。

(2)Uniform Data Access(统一的数据访问方式):Spark SQL使用相同的方式连接不同的数据源。

(3)Hive Integration(集成 Hive):Spark SQL在已有的仓库上直接运行SQL或者HiveQL。

(4)Standard Connectivity(标准的连接方式):Spark SQL通过JDBC或者ODBC来连接。

4.1.3  什么是DataFrame

与RDD类似,DataFrame也是一个分布式数据容器。

然而DataFrame更像传统数据库的二维表格,除了数据以外,还记录数据的结构信息,即schema。

同时,DataFrame与Hive类似,也支持嵌套数据类型(struct、array和map)。

从API易用性的角度上看,DataFrame API提供的是一套高层的关系操作,比函数式的RDD API要更加友好、门槛更低。

DataFrame与RDD的区别如图4-5所示。

图4-5

图中左侧的RDD[Person]虽然以Person为类型参数,但Spark框架本身不了解Person类的内部结构。而右侧的DataFrame却提供了详细的结构信息,使得Spark SQL可以清楚地知道该数据集中包含哪些列,每列的名称和类型各是什么。

DataFrame为数据提供了schema视图,可以把它当作数据库中的一张表来对待。

DataFrame也是懒执行的,性能上比RDD要高,主要原因在于优化的执行计划—查询计划通过Spark Catalyst Optimiser(Catalyst优化器,基于Scala的函数式编程结构设计的可扩展优化器)进行优化。

为了说明查询优化,我们来看图4-6展示的人口数据分析的示例。

图4-6

图中构造了两个DataFrame,将它们join之后又做了一次filter操作。

如果原封不动地执行这个计划,最终的执行效率不是很高,因为join是一个代价较大的操作,也可能会产生一个较大的数据集。如果我们能将filter下推到join下方,先对DataFrame进行过滤,再join过滤后的较小的结果集,便可以有效缩短执行时间。而Spark SQL的查询优化器正是这样做的。简而言之,逻辑查询计划优化就是一个利用基于关系代数的等价变换,将高成本操作替换为低成本操作的过程。

4.1.4  什么是DataSet

(1)DataSet是DataFrame API的一个扩展,也是Spark SQL最新的数据抽象(1.6版本新增)。

(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只是知道字段,但是不知道字段的类型,所以在执行这些操作时是没办法在编译的时候检查字段类型是否正确,比如我们对一个字符串进行减法操作,在执行的时候才报错。而DataSet不仅知道字段,还知道字段类型,所以有更严格的错误检查。

本文摘自《Spark入门与大数据分析实战》,获出版社和作者授权发布。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/723430.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开放式耳机推荐,盘点几款好用的开放式耳机

一款好的开放式蓝牙耳机不仅可以让我们缓解疲劳,还能更有动力,特别是音质的表现,如果一款开放式耳机的音质表现不好,那这款耳机也就没有多大意义了,还有就是佩戴舒适性,所以选择一款好的开放式蓝牙耳机也很…

vs2015调试时无法显示QT变量值

问题描述: vs2015调试时无法显示 QT变量值,只能显示地址,导致想要查看变量值的时候,只能想办法打印出来,非常麻烦。如下图: 问题解决: 调试 - 选项 - 调试 - 常规 - 去掉 使用本机兼容性模式&am…

压测性能调优之gateway网关

1、 压测资源和场景 (1)14个接口同时压测5000并发; (2)服务资源:采用k8s部署,总共25台8核64G阿里云机器,node节点个数22个,master3个,15个网关实例&#xf…

综合评价算法 | Matlab实现基于CRITIC法的综合评价算法

文章目录 效果一览文章概述研究内容源码设计参考资料效果一览 文章概述 综合评价算法 | Matlab实现基于CRITIC法的综合评价算法 研究内容 CRITIC法是一种比熵权法和标准离差法更好的客观赋权法。它是基于评价指标的对比强度和指标之间的冲突性来综合衡量指标的客观权重。考虑指…

【AttributeError: module ‘cv2‘ has no attribute ‘saliency‘】

AttributeError: module ‘cv2’ has no attribute ‘saliency’ 问题解析 已经成功安装cv2且import cv2成功的情况下(如下图黄色框所示),在运行时报如下所示错误: AttributeError: module cv2 has no attribute saliency 这个错…

Guitar Pro8.1最新版吉他练习好助手

Guitar Pro研发团队深知「简谱」之于中国用户的重要性,在经过几个月的测试和开发,最新的Guitar Pro软件已全面支持简谱功能!会带给您音乐学习和创作的极大便利。相信玩吉他的朋友多多少少都听说过Guitar Pro这款软件,那大家知道Gu…

stable diffusion 调试天坑 (setup.py)

第一次下载V1的stable diffusion (https://github.com/CompVis/stable-diffusion) 到本地调试,根据其要求创建了虚拟环境,自动运行了setup.py文件,长这样 from setuptools import setup, find_packagessetup(namelatent-diffusion,version0.…

张驰咨询:精益生产管理消除浪费,提高效率,降低成本!

精益生产管理是一种以消除浪费为主的生产管理方法。它起源于日本,此后被世界各地的企业所采用和实践。下面张驰咨询探讨精益生产管理的作用及其对企业。 1. 精益生产管理的作用 提高生产效率:通过消除浪费,精益生产管理可以使企业在相同的时…

动态规划——区间dp [石子合并]

动态规划——区间dp 什么是动态规划区间dp定义应用 例题引入题目描述输入格式输出格式样例样例输入样例输出 提示 贪心法区间dp优缺点:AC代码:代码详解三层for循环状态转移方程环形的处理 什么是动态规划 动态规划(dp)是一种通过…

高数基础10不定积分

目录 不定积分 原函数存在定理: 定理1 定理2: 例题1: 例题2: 例题3: 不定积分的性质: 不定积分的基本公式: 例题4: 例题5: ​编辑 例题6: 三种主要积分法…

喜讯!安全狗再次获得“纳税大户”称号

近日,厦门市思明区人民政府公布了《2022年度纳税大户名单》。安全狗入选名单并被授予“2022年度纳税大户”称号。 厦门服云信息科技有限公司(品牌名:安全狗)成立于2013年,致力于提供云安全、(云&#xff09…

入门_科研论文写作

不整理笔记,等于没学过(for me🙃) Ideas 多读论文动手做实验 找对应的、最新的数据集(比如某一类的效果欠佳,那是为什么捏) 从论文的实验分析得出结论 跑别人的代码,分析预测的数据…

LNMP架构及应用部署

LNMP架构及应用部署 安装nginx 关闭防火墙和selinux [rootlocalhost ~]#systemctl stop firewalld [rootlocalhost ~]# setenforce 0 [rootlocalhost ~]# iptables -F 安装依赖软件 [rootlocalhost ~]# mount /dev/cdrom /mnt ---挂载光盘(先要创建yum仓…

SQL-每日一题【511.游戏玩法分析Ⅰ】

题目 活动表 Activity: 写一条 SQL 查询语句获取每位玩家 第一次登陆平台的日期。 查询结果的格式如下所示: 解题思路 前置知识 MIN()函数 MIN 函数返回一列中的最小值。NULL 值不包括在计算中。 SQL MIN() 语法 SELECT MIN(co…

2023WAIC世界人工智能大会

“在卢浮宫看蒙娜丽莎的感觉” 图源自朋友 附言: 前几天在想能不能为AI文本生成设计一种AI独有的字体,结果今天看到这个新闻:阿里巴巴全新可变字体发布,免费可商用。

Java微服务金融项目智牛股-基础知识三(Restful、HATEOAS、GRPC、SEATA )

Restful定义 Restful是一种软件架构与设计风格, 并非一套标准, 只提供了一些原则与约定条件。REST提供了一组架构约束,当作为一个整体来应⽤用时,强调组件交互的可伸缩性。接⼝口的通⽤用性、组件的独⽴立部署、以及⽤用来减少交…

SSMP整合案例(13) 在界面中实现编辑操作

做完我们的删除 那肯定是做编辑 其实编辑和添加基本是一个东西 我们打开 src下的 components 下的bookFillIn.vue 组件 之前我们做添加的这个弹窗组件 加一个函数叫 editBook 接收一个参数 id 内容先不管 然后 在data中 加多一个键 id 值 null 然后 将sensor 展开弹窗函数 更…

C# PaddleInference 文字检测(只检测不识别)

效果 项目 Demo下载 代码 using OpenCvSharp.Extensions; using OpenCvSharp; using Sdcb.PaddleInference.Native; using Sdcb.PaddleInference; using System; using System.Collections.Generic; using System.Data; using System.Drawing; using System.Linq; using Syst…

【完整代码】电商购物系统Python,基于Flask框架实现

一、介绍 电商购物系统Python,基于Flask框架实现。 实现用户查看商品、购买商品、添加购物车、商城订单、编辑个人信息、点击喜欢不喜欢等、商品评论、登录注册、查看物流信息等功能。 实现商家发布商品、查看销售列表、管理商品、物流信息更新、个人信息修改等功能…

腾讯游戏服务器外包二面

1.基础问题 2.网络协议 3.数据结构 3.1二叉树的前序遍历 3.2实现二叉树的前序遍历 https://www.nowcoder.com/practice/5e2135f4d2b14eb8a5b06fab4c938635?tpId295&tqId2291302&ru/exam/oj&qru/ta/format-top101/question-ranking&sourceUrl%2Fexam%2Foj…