spark简明扼要之RDD理解
程序员文章站
2022-03-24 17:37:44
...
RDD是什么
A Resilient Distributed Dataset,即弹性分布式数据集
是Spark中最基本的数据抽象,
说它弹性,是因为这个数据集是不可变的,
能够手动或自动进行内存和磁盘数据存储的切换
能够基于Lineage的高效容错
说它分布式,是因为它的数据是分区存放在各个节点之上,
并可进行并行计算。
RDD有什么特性
共有5大特性
1. A list of partitions:一组分片
在rdd创建的时候,可手动和自动切分地切分分片,分片决定了task并行的数量,基本是one task per partition
2. A function for computing each split:一个计算分区的函数
3. A list of dependencies on other RDDs:即RDD的Lineage
第n个RDD挂了后,可以通过n-1个rdd进行容错复原。
4. Optionally, a Partitioner for key-value RDDs:即PairRDD,通过hash实现
5. Optionally, a list of preferred locations to compute each split on
即数据本地化计算,尽可能保证 计算函数 和 数据分区 在同一个node上,从而达到数据本地化计算。
RDD存储的是什么
RDD虽说是一个数据集,但实际存储的并不是数据,而是:数据的类型,分区的地址,数据的获取方法等描述数据的数据。
ps:传统软件开发领域是程序不动数据动,然,大数据领域的原则是数据不动程序动。
RDD如何创建
1. 初始化运行上下文环境
SparkConf conf = new SparkConf().setAppName(appName).setMaster(master);
JavaSparkContext sc = new JavaSparkContext(conf);
2. 创建RDD
2.1. 通过list创建
List<Integer> data = Arrays.asList(1, 2, 3, 4, 5);
JavaRDD<Integer> distData = sc.parallelize(data);
2.2. 通过外部数据集创建
JavaRDD<String> distFile = sc.textFile("data.txt");
RDD的操作:Transformation,shuffle,action
1. Transformation:转换-->从a状态变成b状态,并不真正执行,只是记录操作步骤
2. shuffle:洗牌-->把所有分区数据进行按照某种要求进行打散,从而组成新分区,如下图所示。
3. action:动作-->真正触发计算