什么是RDD
RDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象
。代码中是一个抽象类,它代表一个不可变
、可分区
、里面的元素
可并行计算
的集合。
RDD 属性
- 一组分区(Partition),即数据集的基本组成单位;
- 一个计算每个分区的函数;
- RDD之间的依赖关系;
- 一个Partitioner,即RDD的分片函数;
- 一个列表,存储存取每个Partition的优先位置(preferred location)。
RDD 特点
RDD表示只读
的分区的数据集,对RDD进行改动,只能通过RDD的转换操作
,由一个RDD
得到一个新的RDD
,新的RDD包含了从其他RDD衍生所必需的信息。RDDs之间存在依赖,RDD的执行是按照血缘关系延时计算的。如果血缘关系较长,可以通过持久化RDD来切断血缘关系。
RDD 分区
RDD逻辑上是分区的,每个分区的数据是抽象存在的,计算的时候会通过一个compute函数得到每个分区的数据。如果RDD是通过已有的文件系统构建,则compute函数是读取指定文件系统中的数据,如果RDD是通过其他RDD转换而来,则compute函数是执行转换逻辑将其他RDD的数据进行转换。
RDD 的创建
RDD的创建又三种方式:从集合中创建RDD;从外部存储创建RDD;从其他RDD创建。
创建 RDD,首先要构建 Spakr 的上下文对象
// 创建 Spark 上下文对像 val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("mkRdd") val sc: SparkContext = new SparkContext(config = conf)
集合中创建
这种方式又叫从内存创建
,Spark 主要提供了两种函数:parallelize
和 makeRDD
,查看源码会发现 makeRDD 底层把数据传给了parallelize
,所以这两个是差不多
参数 传入
有序,可重复
集合
val strRDD: RDD[String] = sc.makeRDD(Array("1", "2", "3", "4")) val intRDD: RDD[Int] = sc.parallelize(List(1, 2, 3, 4))
外部创建
路径支持本地文件
、HDFS 路径
,和 支持HDFS文件的URL,比如 HBase
val fileRDD: RDD[String] = sc.textFile("路径")
其他RDD创建
RDD使用算子计算后返回的还是RDD
版权声明:《 Spark RDD 概述 》为明妃原创文章,转载请注明出处!
最后编辑:2020-2-13 15:02:29