RDD紹介

1859 ワード

フルネームResilient Distributed Data sets.Resilient(フレックス):データセットの分割(さらに並列度を決定)が可変
内部インタフェース:
  • パーティション
  • 依存
  • 計算(Computing)
  • パーティション
  • 優先位置(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クラスには、そのパーティションのRDD内の番号を示すindexメンバーが含まれており、RDD番号にパーティション番号を付けることで、そのパーティションに対応するブロック番号を一意に特定することができ、下位データ記憶層が提供するインタフェースを利用して、記憶媒体からパーティションに対応するデータを抽出することができる.
    パーティションの個数:狭依頼子RDDは親RDDパーティションの個数によって決定され、Shuffle依存は子RDDパーティションによって決定される.
    に頼る
    SparkはRDDの変換動作である.子RDDと親RDDの関係を依存関係と呼ぶ.依存関係がステージの区分を決定する.
    abstract class Dependency[T] extends Serializable { 
        def rdd: RDD[T]
    }
    

    各Dependencyサブクラスの内部には、親RDDに対応するRDDオブジェクトが格納されます.
    依存は狭い依存(Narrow Dependency)とShuffle依存(Shuffle Dependency)に分けられる.狭い依存度では、親RDDの1つのパーティションは、最大でRDDの1つのパーティションによってのみ使用され、言い換えれば、親RDDでは、1つのパーティション内のデータは分割されず、サブRDDの1つのパーティションに全体的に渡さなければならない.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
    }