RDD紹介
1859 ワード
フルネームResilient Distributed Data sets.Resilient(フレックス):データセットの分割(さらに並列度を決定)が可変
内部インタフェース:パーティション 依存 計算(Computing) パーティション 優先位置(Prefered Location) 持続化(Persistence)とチェックポイント(Checkpoint) パーティション
パーティションは、並列計算を表す計算ユニットを表します.
RDDはデータセットの抽象にすぎず,パーティション内部には具体的なデータは格納されない.Partitionクラスには、そのパーティションのRDD内の番号を示すindexメンバーが含まれており、RDD番号にパーティション番号を付けることで、そのパーティションに対応するブロック番号を一意に特定することができ、下位データ記憶層が提供するインタフェースを利用して、記憶媒体からパーティションに対応するデータを抽出することができる.
パーティションの個数:狭依頼子RDDは親RDDパーティションの個数によって決定され、Shuffle依存は子RDDパーティションによって決定される.
に頼る
SparkはRDDの変換動作である.子RDDと親RDDの関係を依存関係と呼ぶ.依存関係がステージの区分を決定する.
各Dependencyサブクラスの内部には、親RDDに対応するRDDオブジェクトが格納されます.
依存は狭い依存(Narrow Dependency)とShuffle依存(Shuffle Dependency)に分けられる.狭い依存度では、親RDDの1つのパーティションは、最大でRDDの1つのパーティションによってのみ使用され、言い換えれば、親RDDでは、1つのパーティション内のデータは分割されず、サブRDDの1つのパーティションに全体的に渡さなければならない.Shuffle依存では、親RDDのパーティションが複数のサブRDDパーティションで使用される場合があります.
パーティション
ハッシュパーティション:そのgetPartitionメソッドの実装は簡単で、キー値のhashCodeを取り、サブRDDのパーティション個数で除算すればよい.
内部インタフェース:
パーティションは、並列計算を表す計算ユニットを表します.
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
}