Spark RDD

207 阅读1分钟

一、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)