Spark- RDD简介

Spark里面提供了一个比较重要的抽象——弹性分布式数据集(resilient distributed dataset),简称RDD。弹性:数据可大可小,可分布在内存或磁盘,当某台机器宕机时,能够按照RDD的liveage重新计算,从而恢复。

RDD有5个特性:

1.一个分区列表,用于并行计算,每个分区对应一个原子数据集,作为这个分区的数据输入

2.计算这个RDD某个分区数据(这个分区数据是由父RDD对应分区计算出来的)函数

3.一个依赖列表,这个rdd依赖的父rdd是哪些(在计算的时候可以通过这个依赖来容错)

4.这个rdd的分区元素数据信息,其实就是该RDD怎么分区的,比如某个RDD是通过hash partition得到的

5.分区数据的存储地址,用来实现计算任务的本地性,即把计算放在由相关数据的机器上执行。  

6.spark的计算是“流式”计算,如,有可能一个block的数据量很大,一次性读出来肯定很占内存,所有的数据块都都出来时可能内存还不够,那么它不是将整个block读出来,而是读出一条处理计算一条,类似流式计算,这样可以省内存不用担心内存不够。 

创建RDD的三种方式

方式一:从存储在存储系统中的数据上来创建,比如:

val inputRdd: RDD[(LongWritable,Text)] = sc.newAPIHadoopFile("hdfs://master:9000/word.txt",classOf[TextInputFormat],classOf[LongWritable])

这个就是从hdfs存储系统中的数据创建一个RDD

方式二:可以基于一个已经存在的RDD来创建一个RDD

val line: RDD[(String, Int)] = lines.map(line=>(line,1))  //从已经存在的lines上创建一个新的RDD

方式三:可以基于一个已经在spark内存中的列表数据来创建一个RDD,比如:

val data = Array(1, 2, 3, 4, 5)
val distData = sc.parallelize(data)

spark sql将Dataset的api翻译成RDD的api来达到计算目的

spark ml是利用Dataset的api和RDD的api来达到计算目的

spark mllib是利用RDD api来达到计算目的

spark Streaming将DStreaming的api翻译成RDD api来达到计算目的

spark graphx是利用RDD api以及拓展RDD来达到计算目的

原文地址:https://www.cnblogs.com/RzCong/p/7812169.html