spark核心编程(未完待续)
spark核心编程
Spark 计算框架为了能够进行高并发和高吞吐的数据处理,封装了三大数据结构,用于
处理不同的应用场景。三大数据结构分别是:一、RDD : 弹性分布式数据集
二、累加器:分布式共享只写变量
三、广播变量:分布式共享只读变量
一、RDD : 弹性分布式数据集
1、什么是RDD
RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是 Spark 中最基本的数据
处理模型。代码中是一个抽象类,它代表一个弹性的、不可变、可分区、里面的元素可并行
计算的集合。
➢ 弹性
存储的弹性:内存与磁盘的自动切换;
容错的弹性:数据丢失可以自动恢复;
计算的弹性:计算出错重试机制;
分片的弹性:可根据需要重新分片。
➢ 分布式:数据存储在大数据集群不同节点上
➢ 数据集:RDD 封装了计算逻辑,并不保存数据
➢ 数据抽象:RDD 是一个抽象类,需要子类具体实现
➢ 不可变:RDD 封装了计算逻辑,是不可以改变的;
想要改变,只能产生新的RDD,在新的RDD里面封装计算逻辑
➢ 可分区、并行计算
2、IO流实现原理(来理解RDD)
IO:Input(输入流) & Output(输出流)
流:字节流 & 字符流
IO以读文件为例,假设有一个File文件
(1)字节流读取
//字节流(一个字节一个字节的来读)
InputStream in = new FileInputStream("文件路径") //读取文件
int i = -2
while((i = in.read()) != -2){ //如果i不等于-2,打印出来
printIn(i);}
//功能:读一个,打印一个,效率不高

(2)因为读一个,打印一个,效率比较低,这时候引入一个缓冲流(BufferedInputStream)
//字节流引入缓冲流(一个字节一个字节的来读,读完先放到一个缓冲区)
InputStream in = new BufferedInputStream(FileInputStream("文件路径")) //读取文件
int i = -2while((i = in.read()) != -2){ //如果i不等于-2,打印出来
printIn(i);}

2、字符流读取
在实际操作中,都是读取文件中的一行一行的数据,并不是一个字节一个字节的来读取;
一行一行的读取就属于字符流
读取字符流,需要使用BufferedReader,同时还需要使用转换流,将字节转换为字符。
英文和数字:1个字符=1个字节;中文:1个字符=3个字节
//字符流
Reader in = new BufferedReader(
new InputStreamReader( //转换流
new FileInputStream("文件路径")
“UTF-8”
)
)
String s= null
while((s = in.readLine()) != null){ //如果s不等于null,打印出来
printIn(i);
}
真正读取文件的还是底层的FileInputStream,外层的InputStreamReader和BufferedReader算是一种包装,提供了一些功能。整体体现的是一种装饰者设计模式。

过程:当读取了3个字节,进入转换区,会将三个字节转换为一个字符,例如"李","李"再进入缓冲区,依次类推,当缓冲区达到溢值,会将这一批字符输出打印

浙公网安备 33010602011771号