Spark RDD 概述

什么是RDD

RDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象。代码中是一个抽象类,它代表一个不可变可分区、里面的元素并行计算的集合。

RDD 属性

  1. 一组分区(Partition),即数据集的基本组成单位;
  2. 一个计算每个分区的函数;
  3. RDD之间的依赖关系;
  4. 一个Partitioner,即RDD的分片函数;
  5. 一个列表,存储存取每个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 主要提供了两种函数:parallelizemakeRDD,查看源码会发现 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

发表评论 / Comment

用心评论~