RDD常用算子
1.什么是RDD
-
RDD(Resilient Distributed Dataset)弹性分布式数据集,是Spark中最基本的数据抽象,代表一个不可变、可分区、里面的元素可并行计算的集合
-
所有的运算以及操作都建立在RDD数据结构的基础上
-
可以认为RDD是分布式的列表或数组,抽象的数据结构,RDD是一个抽象类Abstract Class泛型Generic Type
2.RDD的五大特征
- RDD是有分区的
- RDD的分区是RDD数据储存的最小单位
- 一份RDD的数据,本质上是分隔成了很多区
- RDD的方法会作用在其所有的分区上
- RDD之间有依赖关系
- Key-Value型的RDD可以有分区器
- 默认分区器:Hash分区规则,可以手动设置一个分区器
- RDD的分区规划,会尽量靠近数据所在的服务器
- 在初始RDD(读取数据的时候)规划的时候,分区会尽量规划到储存数据所在的服务器上,只有就可以走本地读取,避免网络读取
3.程序执行入口SparkContext对象
- Spark RDD编程的程序入口对象是SparkContext对象(不论何种对象)
- 只有构建出SparkContext,基于它才能执行后续的API调用和计算
- 本质上,SparkContext对编程来说,主要功能就是创建第一个RDD出来
4.RDD的创建
-
通过并行化集合创建
-
并行化创建,是指将本地集合转化成分布式RDD(本地转分布式)
rdd = sparkcontext.parallelize(参数1,参数2) # 参数1:集合对象即可,比如list # 参数2:分区数
-
读取文件
-
textfile:这个API可以读取本地数据,也可以读取hdfs数据
sparkcontext.textfile(参数1,参数2) # 参数1.文件路径,支持本地文件,支持HDFS路径 # 参数2.表示最小分区数量(可选) # 注意:参数2话语权不足,spark有自己的判断,在它允许的范围内,参数2有效果,超过spark允许的范围,参数2失效
-
wholeTextFile:适合读取小文件,尽量少分区读取数据,减少shuffle几率
sparkcontext.wholeTextFiles(参数1,参数2) # 参数1.文件路径,支持本地文件路径和HDFS文件路径 # 参数2.表示最小分区数量 # 注意:参数2话语权不足,spark有自己的判断,在它允许的范围内,参数2有效果,超过spark允许的范围,参数2失效
-
-
5.RDD算子
- 什么是算子?
- 分布式集合对象上的API称之为算子
- RDD算子分为两类
- Transformation:转换算子
- 定义:返回值仍旧是RDD的,称之为转换算子
- 特性:这类算子是lazy懒加载的,如果没有action算子,Transformation算子是不工作的
- Action:动作算子
- 定义:返回值表示RDD的就是action算子
- Transformation:转换算子
对于这两类算子来说,Transformation算子,相当于在构建计划,action是一个指令让这个执行计划开始工作。
如果没有action,Transformation算子之间的迭代关系,就是一个没有通电的流水线。只有action到来,这个数据处理的流水线才开始工作
6.常用Transformation算子
-
map:将RDD的数据一条条处理(处理的逻辑基于map算子中接收到的处理函数),返回新的RDD
rdd.map(fu