RDD in Spark

What is RDD in Spark?

A Resilient Distributed Dataset (RDD), the basic abstraction in Spark. Represents an immutable, partitioned collection of elements that can be operated on in parallel.

Each RDD is split into multiple partitions (a smaller units), which may be computed on different aspects of nodes of the cluster.

RDD 即弹性分布式数据集,是 Spark 中对数据的基本抽象。表示可用于并行操作的、分区的、不可修改的元素集合。RDD 被划分为多个分区,每个分区可以被用于在集群的不同节点上计算。

Properties

RDD 由以下五个基本属性组成:

  1. 分区 - getPartitions: Array[Partition]
  2. 计算给定分区的函数 - compute(split: Partition, context: TaskContext): Iterator[T]
  3. 对其他 RDD 的依赖 - getDependencies: Seq[Dependency[_]]
  4. (可选)对键值型 RDD 进行分区的分区方法 - partitioner: Option[Partitioner]
  5. (可选)配置计算分区时的一系列优选位置 - getPreferredLocations(split: Partition): Seq[String]; SparkContext 中 makeRDD[T: ClassTag](seq: Seq[(T, Seq[String])]): RDD[T] 方法支持从一个 scala 数据集合创建 RDD 时,为每个集合元素指定优选位置;

Types of RDD

Spark 源码中存在多种类型的 RDD,从产生的方式上看,主要可以划分为以下几类:

数据源相关

此类 RDD 的结构与其数据来源密切相关,如:

  1. HadoopRDDNewHadoopRDD: 读取来自 HDFS/HBase/S3 的数据,两者的区别在于使用了 旧/新 版本的 MapReduce API;
  2. SequenceFileRDD: HDFS的 SequenceFile 创建而来的 RDD
  3. ParallelCollectionRDD: Scala 集合并行化而来的 RDD,makeRDDparallelize 方法返回的都是 ParallelCollectionRDD;
  4. JdbcRDD: 在 JDBC 连接上执行 SQL 查询并读取结果的 RDD

转换相关

此类 RDD 用作表示一些转换操作的结果或中间结果,如:

  1. MapPartitionsRDD: map, filterflatMap 等操作返回的 RDD, 该类型的 RDD 会在父 RDD 的每个分区上执行给定的函数;
  2. CoGroupedRDD: CoGroup 操作返回的 RDD;
  3. CoalescedRDD: 调用 repartitioncoalesce 等操作的结果;
  4. ShuffledRDD: Shuffle 后的结果,例如 repartition 等操作;
  5. PipedRDD: piping 元素构成的 RDD;
  6. PairRDD: key-value 对,例如 groupByKey 之后的结果, 2.3 版的 Spark 中已不存在, 改为使用 PairRDDFunctions 完成同样的功能,并以 RDD[(K, Iterable[V])] 替代作为返回值;

你可能感兴趣的:(RDD in Spark)