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);}
//功能:读一个,打印一个,效率不高

image

(2)因为读一个,打印一个,效率比较低,这时候引入一个缓冲流(BufferedInputStream)

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

image

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算是一种包装,提供了一些功能。整体体现的是一种装饰者设计模式。
image

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

posted @ 2022-08-09 00:52  阿伟宝座  阅读(79)  评论(0)    收藏  举报