RDD介绍

作者: imarch1 | 来源:发表于2016-07-28 14:25 被阅读136次

全称Resilient Distributed Datasets。Resilient(弹性):数据集的划分(进而决定了并行度)可变

内部接口:

  • 分区(Partition)
  • 依赖(Dependency)
  • 计算(Computing)
  • 分区器(Partitioner)
  • 首选位置(Prefered Location)
  • 持久化(Persistence)与检查点(Checkpoint)

分区

分区表示表示并行计算的一个计算单元。

trait Partition extends Serializable 
{ 
    /** * Get the partition's index within its parent RDD */ 
    def index: Int // A better default implementation of HashCode override 
    
    def hashCode(): Int = index
}

RDD 只是数据集的抽象,分区内部并不存储具体的数据。Partition 类内包含一个 index 成员,表示该分区在 RDD 内的编号,通过 RDD 编号加上分区编号可以唯一确定该分区对应的块编号,利用底层数据存储层提供的接口,就能从存储介质中提取出分区对应的数据。

分区的个数:窄依赖子 RDD 由父 RDD 分区个数决定,Shuffle 依赖由子 RDD 分区器决定。

依赖

Spark是RDD的转换操作。子 RDD 与父 RDD 之间的关系称为依赖关系。依赖关系决定了stage的划分。

abstract class Dependency[T] extends Serializable { 
    def rdd: RDD[T]
}

每个 Dependency 子类内部都会存储一个 RDD 对象,对应一个父 RDD。

依赖分为窄依赖(Narrow Dependency)和 Shuffle 依赖(Shuffle Dependency)。
窄依赖中,父 RDD 中的一个分区最多只会被子 RDD 中的一个分区使用,换句话说,父 RDD 中,一个分区内的数据是不能被分割的,必须整个交付给子 RDD 中的一个分区。Shuffle 依赖中,父 RDD 中的分区可能会被多个子 RDD 分区使用。

分区器

哈希分区器:其 getPartition 方法的实现很简单,取键值的 hashCode,除以子 RDD 的分区个数取余即可。

class HashPartitioner(partitions: Int) extends Partitioner {
  def numPartitions: Int = partitions

  def getPartition(key: Any): Int = key match {
    case null => 0
    case _ => Utils.nonNegativeMod(key.hashCode, numPartitions)
  }

  override def equals(other: Any): Boolean = other match {
    case h: HashPartitioner =>
      h.numPartitions == numPartitions
    case _ =>
      false
  }

  override def hashCode: Int = numPartitions
}

相关文章

  • RDD介绍

    全称Resilient Distributed Datasets。Resilient(弹性):数据集的划分(进而决...

  • 3 RDDs基本操作之Transformations

    1 Transformations介绍 Transformations(转换)从之前的RDD构建一个新的RDD,像...

  • Spark-RDD介绍

    RDD 1 RDD介绍 Driver program:包含程序的main()方法,RDDs的定义和操作。管理节点,...

  • Spark 核心 RDD 剖析(下)

    上文Spark 核心 RDD 剖析(上)介绍了 RDD 两个重要要素:partition 和 partitione...

  • Spark RDD

    RDD介绍 RDD概念 一个RDD就是一个分布式对象集合,本质上是一个只读的分区记录集合,每个RDD可以分成多个分...

  • pyspark--RDD基本操作

    spark中的RDD是一个核心概念,RDD是一种弹性分布式数据集,spark计算操作都是基于RDD进行的,本文介绍...

  • 在RDD、DataFrame和DataSet之间怎么选?

    先来介绍一下spark中的RDD、DataFrame和DataSet: RDD(弹性分布式数据集)数据元素的不可变...

  • RDD分区源码追踪

    RDD的创建分为从集合中创建RDD和从存储系统中创建RDD,两者的分区策略有所不同,下面将通过例子和源码来介绍它们...

  • Apache Spark 2.2.0 中文文档 - Spark

    Spark RDD(Resilient Distributed Datasets)论文 概要 1: 介绍 2: R...

  • Apache Spark 2.2.0 中文文档 - Spark

    Spark RDD(Resilient Distributed Datasets)论文 概要 1: 介绍 2: R...

网友评论

      本文标题:RDD介绍

      本文链接:https://www.haomeiwen.com/subject/ibeajttx.html