一、RDD简介
Resilient Distributed DataSet:弹性分布式数据集
弹性:Spark可以通过重新安排计算来自动重建丢失的分区。
分布式:集群中跨多个机器分区存储。
RDD是一个基本的抽象,操作RDD就像操作一个本地集合一样,降低了编程的复杂度。
RDD不存储真正要计算的数据,而是记录了RDD的转换关系(调用了什么方法,传入了什么函数)。
二、RDD的五大特性
1.RDD是由一系列的partition组成的。
2.算子是作用在每一个partition上的。
3.RDD之间有依赖关系。(一级,不是继承)
4.分区器是作用在K,V格式的RDD上。
5.RDD提供一系列最佳的计算位置。
三、创建RDD的方式有哪些
1.通过外部的存储系统创建RDD,外部存储系统包括文件系统、数据库。
// 读取本地文件
val sparkSession = SparkSession.builder.master("local").appName("app").getOrCreate()
val rdd = sparkSession.sparkContext.textFile("./data/words")
2.将Driver端的Scala集合通过并行化的方式变成RDD(仅在实验、测试时)。
val sparkSession = SparkSession.builder.master("local").appName("app").getOrCreate()
val rdd = sparkSession.sparkContext.makeRDD(List(1, 1, 3, 4, 5, 6, 7, 8))
3.调用一个已经存在的RDD的Transformation算子,会生成一个新的RDD。
val sparkSession = SparkSession.builder.master("local").appName("app").getOrCreate()
val rdd1 = sparkSession.sparkContext.makeRDD(List(1, 1, 3, 4, 5, 6, 7, 8))
/** filter算子 */
val rdd2 = rdd1.filter(_ % 2 == 0)