??RDD叫作弹性分布式数据集合,是spark中最基本的数据(计算、逻辑)抽象,在代码中它是一个抽象类,代表一个不可变、可分区、里面的元素的可并行计算的集合。
1.一组分区,即数据集的基本组成单位
2.一个计算每个分区的函数
3.RDD之间存在依赖关系(血统)
4.一个Partitioner,即RDD的分片函数
5.一个列表,存储存取每个Partition的优先位置(移动数据不如移动计算)
??RDD表示只读的分区的数据集,对RDD进行改动,只能铜鼓RDD的转换操作,由一个RDD得到一个新的RDD,新的RDD包含了从其他RDD衍生所必须的信息。RDDs之间存在依赖,RDD执行的是按照血缘关系延时计算的。如果血缘关系较长,可以通过持久化RDD来切断血缘关系。如果程序中多次使用同一个RDD,可以将该RDD进行缓存,只有在第一次计算的时候回根据血缘关系得到分区数据,在后续其他地方用到直接从缓存中取
Spark中所有的RDD方法都称为算子,有转换算子和行动算子两大类。
有三种创建方式
注:以下都是在local部署模式下的条件上说明
从集合中创建
spark提供了两种函数:parallelize()和makeRDD(),底层实现都是用的parallelize()
1.使用parallelize()
val arrayRDD = sc.parallelize(Array(1,2,3,4))
val arrayRDD = sc.parallelize(Array(1,2,3,4),X) #自定义分区数量,默认是8
2.使用makeRDD()
val listRDD = sc.makeRDD(lsit(1,2,3,4))
从外部存储系统的数据集创建
默认情况下,可以读取项目路径,也可以读其他路径,例如HDFS
val fileRDD = sc.textFile("XXX")
val fileRDD = sc.textFile(("XXX"),X) #这里自定义分区为最小分区数,具体如何分区依赖于hadoop的切片规则
**RDD整体上分为Value类型和Key-Value类型
1.Value类型
原文:https://www.cnblogs.com/zqzhen/p/12747554.html