2024-02-26(Spark)

1.Spark SQL是Spark的一个模块,用于处理海量结构化数据

限定:结构化数据处理

RDD的数据开发中,结构化,非结构化,半结构化数据都能处理。

2.为什么要学习SparkSQL

SparkSQL是非常成熟的海量结构化数据处理框架。

学习SparkSQL主要在2个点:

a.SparkSQL本身十分优秀,支持SQL语言\性能强\可以自动优化\API兼容\兼容HIVE等

b.企业大面积在使用SparkSQL处理业务数据:离线开发,数仓搭建,科学计算,数据分析

3.SparkSQL的特点

a.融合性:SQL可以无缝的集成在代码中,随时用SQL处理数据

b.统一数据访问:一套标准的API可以读写不同的数据源

c.Hive兼容:可以使用SparkSQL直接计算并生成Hive数据表

d.标准化连接:支持标准化JDBC\ODBC连接,方便和各种数据库进行数据交互

4.SparkSQL和Hive的异同点

Hive和SparkSQL都是分布式SQL计算引擎,用于处理大规模结构化数据的。并且Hive和SparkSQL都可以运行在YARN之上。

不同点:

SparkSQL是内存计算,底层运行基于SparkRDD。Hive是基于磁盘迭代的,底层运行基于MapReduce。

SparkSQL不支持元数据管理。Hive有元数据管理服务(Metastore服务)

SparkSQL支持SQL和代码的混合执行。Hive仅能以SQL开发。

5.SparkSQL的数据抽象用的是什么

DataFrame:一个分布式的内部以二维表数据结构存储的数据集合。

6.RDD和DataFrame两种数据抽象的区别:

还有就是DataFrame存储数据时,是类似于mysql数据库一样的形式,按照二维表格存储。DataFrame是严格的按照SQL格式的格式来存储数据,所以DataFrame就更适合处理SQL数据

而RDD是按照数组对象的形式存储。RDD存储数据很随意,很多数据结构的数据都能存储。

7.SparkSession对象

在Spark的RDD阶段中,程序的执行入口是SparkContext对象。

在Spark  2.0之后,推出了SparkSession对象,来作为Spark编码的统一入口对象。

SparkSession对象可以:

a.用于SparkSQL编程作为入口对象

b.用于SparkCore编程,通过SparkSession对象中获取到SparkContext

8.总结

1)SparkSQL和Hive都是用在大规模SQL分布式计算的计算框架,均可以运行在YARN上,在企业中被广泛应用。

2)SparkSQL的数据抽象为:SchemaRDD(废弃),DataFrame(Python,R,Java,Scala),DataSet(Java,Scala)

3)DataFrame同样是分布式数据集,有分区可以并行计算,和RDD不同的是,DataFrame中存储的数据结构是以表格形式组织的,方便进行SQL运算。

4)DataFrame对比DataSet基本相同,不同的是DataSet支持泛型特性,可以让Java,Scala语言更好的利用到。

5)SparkSession是2.0之后推出的新的执行环境的入口对象,可以用于RDD,SQL等编程。

9.DataFrame的组成

二维表结构

在结构层面:structType对象描述整个DataFrame的表结构;structField对象描述一个列的信息。

在数据层面:Row对象记录一行数据;Column对象记录一列数据并包含列的信息。

10.DataFrame的创建

1)基于RDD的方式1

DataFrame对象可以从RDD转换而来,都是分布式数据集合,其实就转换一下内部存储的结构,转换为二维表的结构。

通过SparkSession对象的createDataFrame方法来将RDD转换为DataFrame,这里只传入列名称,类型从RDD中进行推断,是否允许为空默认为允许(True)

2)基于RDD的方式2

通过StructType对象来定义DataFrame的“表结构”转换RDD

3)基于RDD的方式3

使用RDD的toDF方法转换为RDD

4)基于Pandas的DataFrame

将Pandas的DataFrame对象,转变为分布式的SparkSQL DataFrame对象。

11.DataFrame支持两种风格进行编程:

1)DSL风格:称之为领域特定语言,其实就是指DataFrame特有的API,DSL风格就是以调用API的方式来处理Data。比如:df.where().limit()

2)SQL语法功能:就是使用SQL语句处理DataFrame的数据。比如:spark.sql("select * from xxx")

11.总结

1)DataFrame在结构层面上由StructField组成描述,由StructType构造表描述。在数据层面上,Column对象记录列数据,Row对象记录行数据。

2)DataFrame可以从RDD转换,Pandas DF转换,读取文件,读取JDBC等方法构建。

3)spark.read.format()和df.write.format()是DataFrame读取和写出的统一化标准API

4)SparkSQL默认在shuffle(洗牌,理解为数据的整合)阶段200个分区,可以修改参数获得最好性能。

5)dropDuplicates可以去重,dropna可以删除缺失值,fillna可以填充缺失值

6)SparkSQL支持JDBC读写,可以用标准API对数据库进行读写操作。

12.SparkSQL定义UDF函数

无论是Hive还是SparkSQL分析处理数据的时候,往往需要使用函数,SparkSQL模块本身自带了很多实现公共功能的函数,在pyspark.sql.function中。SparkSQL和Hive一样支持定义函数:UDF和UDAF,尤其是UDF函数在实际项目中使用最为广泛。

13.SparkSQL的自动优化

RDD的运行完全会按照开发者的代码执行,如果开发者的水平有限,RDD的执行效率也会受影响。

而SparkSQL会对写完的代码,执行“自动优化”,以提高代码运行的效率,避免开发者水平影响到代码执行效率。

为什么SparkSQL可以优化,RDD不行?

因为RDD内含数据类型不限格式和结构,而DataFrame只有二维表结构,可以被针对。SparkSQL的自动优化,依赖于:Catalyst优化器。

14.Catalyst优化器

为了解决过多依赖Hive的问题,SparkSQL使用了一个新的SQL优化器代替Hive的优化器,这个优化器就是Catalyst,整个SparkSQL的优化架构如下:

1)API层简单地说就是Spark会通过一些API接受SQL语句

2)收到SQL语句后,将其交给Catalyst,Catalyst负责解析SQL,生成执行计划等

3)Catalyst的输出应该是RDD的执行计划

4)最终再交给集群去运行

15.SparkSQL的执行流程

1)提交SparkSQL代码

2)catalyst优化

        a.生成原始的AST语法树

        b.标记AST元数据

        c.进行断言下推和列值裁剪,以及其他方面的优化作用在AST上

        d.将最终的AST得到,生成执行计划

        e.将执行计划翻译为RDD代码

3)Driver执行环境入口构建(SqlSession)

4)DAG调度规划逻辑任务

5)TASK调度区分配逻辑任务到具体Executor上工作并监控管理任务

6)Worker干活

DataFrame代码再怎么被优化,最终还是被转换为RDD去执行。

15.Spark on Hive

回顾Hive组件:

对于Hive来说,就两样东西:

1)SQL优化翻译器(执行引擎),翻译SQL到MapReduce并提交到YARN执行

2)MetaStore元数据管理中心

那么Spark on Hive是什么呢?请看下面的图:

由上图可知,Spark on Hive不外乎就是SparkSQL借用了Hive的元数据管理中心,也就是说Hive的MetaStore+SparkSQL就构成了Spark on Hive,然后执行的时候走的是SparkRDD代码这条支线,就不再走Hive老旧的MapReduce这条路线。以上就是Spark on Hive的基本原理

16.ThriftServer服务(就是方便程序员使用,不需要程序员专门会写Spark或者DataFrame的API依然可以操作Spark

该服务监听10000端口,该服务对外提供功能,使得我们可以用数据库工具或者代码连接上来,直接写SQL便可操作Spark。(底层是翻译成RDD运行的)

17.分布式SQL归纳

分布式SQL执行引擎就是使用Spark提供的ThriftServer服务,以“后台进程”的模式持续运行,对外提供端口。

可以通过客户端工具或者代码,以JDBC协议连接使用。

SQL提交后,底层运行的就是Spark任务。

分布式SQL大白话总结:相当于构建了一个以MetaStore服务为元数据Spark为执行引擎的数据库服务,像操作数据库那样方便的操作SparkSQL进行分布式的SQL计算

18.Spark层次关系概念图

19.Spark核心概念思维导图

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

六、Vuex

六、Vuex 6.1 Vuex是什么 概念:专门在 Vue 中实现集中式状态(数据)管理的一个 Vue 插件,对 vue 应 用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方 式,且…

代码随想录算法训练营29期|day62 任务以及具体安排

第十章 单调栈part01 739. 每日温度 class Solution {// 版本 1public int[] dailyTemperatures(int[] temperatures) {int lenstemperatures.length;int []resnew int[lens];/**如果当前遍历的元素 大于栈顶元素,表示 栈顶元素的 右边的最大的元素就是 当前遍历的元…

吴恩达deeplearning.ai:sigmoid函数的替代方案以及激活函数的选择

以下内容有任何不理解可以翻看我之前的博客哦:吴恩达deeplearning.ai专栏 文章目录 引入——改进下需求预测模型ReLU函数(整流线性单元 rectified linear unit)线性激活函数(linear activation function)激活函数的选择实现方式为什么需要激活函数 到现在…

Linux安装Mysql(超详细,亲测)

1.下载MySQL的YUM仓库文件 创建一个文件夹(可以在任意目录建立一个文件夹,这边建议在home下创建) mkdir mysql 进入创建的mysql目录 cd mysql 下载MySQL的YUM仓库文件 wget https://dev.mysql.com/get/mysql57-community-release-el7-11.no…

UDP 与 RTP 实现高效的音视频通信

协议确定了双方通信的规则和流程。在互联网的协议集中,有一种无连接的传输协议,被称为用户数据报协议(UDP,User Datagram Protocol)。 UDP 为应用程序提供了一种简单的数据传输方式,当我们谈到 UDP 应用场…

LeetCode 31 下一个排列

LeetCode 31 下一个排列 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如,arr [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更大的…

Keil5 配置jlink

1.先选好对应的芯片设备 之后步骤参考这个:MDK5 JLINK配置流程_keil5配置jlink仿真器步骤-CSDN博客

LeetCode 热题 100 | 二叉树(四)

目录 1 114. 二叉树展开为链表 2 105. 从前序与中序遍历序列构造二叉树 3 437. 路径总和 III 菜鸟做题(即将返校版),语言是 C 1 114. 二叉树展开为链表 题眼:展开后的单链表应该与二叉树 先序遍历 顺序相同。 而先序遍历就…

MBG(Mybatis-Generator)生成代码

目录 步骤: 1. 创建数据库表 2. 配置 MyBatis Generator 3. 运行 MyBatis Generator 4. 编写业务逻辑 在实际开发中,你会发现有很多重复的工作: 首先是PO对象,我们往往创建与数据库表字段一一对应的PO对象; 其次在Mapper里…

【电机仿真】HFI算法脉振高频电压信号注入观测器-PMSM无感FOC控制

【电机仿真】HFI算法脉振高频电压信号注入观测器-PMSM无感FOC控制 文章目录 前言一、脉振高频电压注入法简介(注入在旋转坐标系的d轴)1.旋转高频电压(电流)注入法2.脉振高频电压注入法 二、高频注入理论1.永磁同步电机的高频模型2…

java spring 01 IOC源码

01.spring 中的基础是IOC 中有一个方法 例子: 01. 02. 03. 这里是扩展方法,现在是空的 beanfactorypostprocessors: 国际化:(一般不管) 广播器: 监听器: 实例化&#xff1…

Day03-课后练习(流程控制_分支结构)(判断年、月、日是否合法,判断打鱼还是晒网,判断星座)

参考答案博客链接跳转 文章目录 巩固题1、从键盘输入一个整数,判断它是否是5的倍数2、从键盘输入一个字符,判断字符类型3、计算折扣后金额4、输出月份对应的英语单词5、计算今天是星期几 简答题拔高题(自愿)6、判断年、月、日是否…