一.RDD基本概念
Resilient Distributed Dataset 叫做弹性分布式数据集,是Spark中最基本的数据抽象,是分布式计算的实现载体,代表一个不可变,可分区,里面的元素并行计算的集合。
先来看看这三个单词的含义:
- Dataset: 一个数据集合,用来存放数据的。之前我们学习的Scala中,Array, Set等也叫数据集。
- Distributed: 分布式存储的,表示数据是存放在不同的机器上的。这就和我们前面学习数据结构就不同了。
- Resilient: 数据可以保存在内存或者磁盘中。
然后,我们在看看它的定义中的一些关键字:
不可变的:immutable。类比理解scala中的不可变集合或者是使用val修饰的变量。
可分区的:集合的数据课划分成为很多部分,每部分称为分区:Partition
并行计算:集合中的数据可以被并行的计算处理,每个分区数据被一个Task任务处理。
二.RDD的创建
spark的计算功能是通过RDD来实现的,那么如何去创建RDD呢?有两种创建方式。
1.从集合内存中创建
可以通过将本地集合(如数组、列表等)传递给 SparkContext 的 parallelize 方法来创建 RDD。
// 创建 SparkConf 和 SparkContext
val conf = new SparkConf().setAppName("RDDFromCollection").setMaster("local[*]")
val sc = new SparkContext(conf)
// 创建一个本地集合
val data = Array(1, 2, 3, 4, 5)
// 通过 parallelize 方法将本地集合转换为 RDD
val distData = sc.parallelize(data, 2) // 第二个参数是分区数
2.从外部存储中创建。例如,读入外部的文件。
// 创建 SparkConf 和 SparkContext
val conf = new SparkConf().setAppName("RDDFromHDFS").setMaster("local[*]")
val sc = new SparkContext(conf)
// 从 HDFS 加载文本文件
val hdfsRDD = sc.textFile("hdfs://namenode:8020/path/to/your/file.txt")
// 获取并打印分区数val partitionCount = hdfsRDD.getNumPartitions
println(s"The number of partitions is: $partitionCount")