圖解RDD血緣關係

  • 需求

有三個RDD ,分別是 rddA,rddB,rddC.取數據1,2,3,4,5而且分紅三個分區,對輸入的數據的每個數據*2 ,只取大於 6 的數據.web

  • 代碼
val rddA = sc.parallelize(List(1, 2, 3, 4, 5),3)
  //rddA: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0]
  val rddB = rddA.map(_*2)
  //rddB: org.apache.spark.rdd.RDD[Int] = MapPartitionsRDD[1]
  val rddC = rddB.filter(_>6)
  //rddC: org.apache.spark.rdd.RDD[Int] = MapPartitionsRDD[2]
  rddC.collect()
  //res0: Array[Int] = Array(8, 10)
  • 圖解

rdd 血緣關係圖

  • idea調試查看

idea查看依賴關係

  • 經過 spark web ui 查看

spark-web-ui 依賴關係

  • 補充

使用代碼rddC.toDebugString打印依賴關係apache

res1: String =
(2) MapPartitionsRDD[2] at filter at <console>:25 []
 |  MapPartitionsRDD[1] at map at <console>:25 []
 |  ParallelCollectionRDD[0] at parallelize at <console>:24 []

窄依賴

  • 說明:父RDD的每一個分區只被一個子RDD分區使用一次
  • 窄依賴有分爲兩種:
  • 1.一種是一對一的依賴,即OneToOneDependency
  • 2.還有一個是範圍的依賴RangeDependency,它僅僅被org.apache.spark.rdd.UnionRDD使用。UnionRDD是把多個RDD合成一個RDD,這些RDD是被拼接而成,每一個父RDD的Partition的相對順序不會變,只不過每一個父RDD在UnionRDD中的Partition的起始位置不一樣
  • 常見算子

map, filter, union, join, mapPartitions, mapValueside

  • 圖解
    窄依賴

寬依賴

  • 說明:父RDD的每一個分區都有可能被多個子RDD分區使用,子RDD分區一般對應父RDD全部分區
  • 常見會對應Shuffle的操做.在會 job中產生一個stage
  • groupByKey, join,partitionBy,reduce
  • 常見算子ui

    • 圖解

寬依賴

wordCountDemo演示

val path = "/user/spark/data/wc.txt"
    val lines = sc.textFile(path, 3)
    //查看每一個分區的數據
    //    lines.mapPartitionsWithIndex((n, partition) => {
    //      partition.map(x => (s"分區編號${n}", s"分區數據${x}"))
    //    }).foreach(println)
    
    val words = lines.flatMap(_.split(","))
    val wordPair = words.map(x => (x, 1))
    val result = wordPair.reduceByKey(_ + _)
    result.collect().foreach(println)
  • 圖解

RDDWordCount

若是以爲文章不錯的話記得關注下公號哦
公衆號idea

相關文章
相關標籤/搜索