ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

第五章_Spark核心编程_Rdd_血缘关系

2022-04-01 12:32:17  阅读:172  来源: 互联网

标签:RDD 编程 scala 血缘关系 Rdd println Spark rdd


1. RDD 血缘关系

  /*RDD 血缘关系*/
  /*
  * 1. 什么是Rdd的血缘关系?
  *   1.RDD 只支持粗粒度转换,即在大量记录上执行的单个操作。
  *   2.将创建 RDD 的一系列 Lineage (血统)记录下来,以便恢复丢失的分区。
  *   3.RDD的 Lineage 会记录RDD的 元数据信息和转换行为
  *       当该RDD的部分分区数据丢失时,它可以根据这些信息来重新运算和恢复丢失的数据分区
  *
  * 2. 怎样查看 Rdd的血缘关系?
  *    rdd.toDebugString
  * */

2. RDD 依赖关系

  /*RDD 依赖关系*/
  /*
  * 1. 什么是Rdd的依赖关系?
  *     当前Rdd和父Rdd的依赖关系
  * 2. 怎样查看 Rdd的依赖关系?
  *     rdd.dependencies
  * */

3. RDD 窄依赖&宽依赖

  /*RDD 窄依赖&宽依赖*/
  /*
  * 1.什么是窄依赖?
  *     当前Rdd的1个分区 最多依赖父Rdd的一个分区
  *     没有Shuffle过程,例如map、flatmap
  *
  * 2.什么是宽依赖?
  *     当前Rdd的1个分区 依赖父Rdd的多个分区数据
  *     有SHuffle过程,例如groupBy
  * */

4. 示例

  //查看 Rdd的血缘关系
  object FindLineAge extends App {

    val sparkconf: SparkConf = new SparkConf().setMaster("local").setAppName("distinctTest")

    val sc: SparkContext = new SparkContext(sparkconf)

    private val rdd: RDD[String] = sc.textFile("Spark_319/src/data/*.txt")


    private val rdd1: RDD[String] = rdd.flatMap(_.split(" "))


    private val rdd2: RDD[(String, Iterable[String])] = rdd1.groupBy(e => e)

    private val rdd3: RDD[(String, Int)] = rdd2.map(tp => (tp._1, tp._2.size))

    println("****rdd*********************")
    println(rdd.toDebugString)

    println("****rdd1*********************")
    println(rdd1.toDebugString)

    println("*****rdd2********************")
    println(rdd2.toDebugString)

    println("*****rdd3********************")
    println(rdd3.toDebugString)



    rdd3.collect().foreach(println(_))

    sc.stop()
  }
  
  //查看 Rdd的依赖关系
  object Finddepend extends App {

    val sparkconf: SparkConf = new SparkConf().setMaster("local").setAppName("distinctTest")

    val sc: SparkContext = new SparkContext(sparkconf)

    private val rdd: RDD[String] = sc.textFile("Spark_319/src/data/*.txt")

    private val rdd1: RDD[String] = rdd.flatMap(_.split(" "))

    private val rdd2: RDD[(String, Iterable[String])] = rdd1.groupBy(e => e)

    private val rdd3: RDD[(String, Int)] = rdd2.map(tp => (tp._1, tp._2.size))

    println("****rdd*********************")
    println(rdd.dependencies)

    println("****rdd1*********************")
    println(rdd1.dependencies)

    println("*****rdd2********************")
    println(rdd2.dependencies)

    println("*****rdd3********************")
    println(rdd3.dependencies)



    rdd3.collect().foreach(println(_))

    sc.stop()
  }
****rdd*********************
(2) Spark_319/src/data/*.txt MapPartitionsRDD[1] at textFile at 血缘关系.scala:54 []
 |  Spark_319/src/data/*.txt HadoopRDD[0] at textFile at 血缘关系.scala:54 []
****rdd1*********************
(2) MapPartitionsRDD[2] at flatMap at 血缘关系.scala:57 []
 |  Spark_319/src/data/*.txt MapPartitionsRDD[1] at textFile at 血缘关系.scala:54 []
 |  Spark_319/src/data/*.txt HadoopRDD[0] at textFile at 血缘关系.scala:54 []
*****rdd2********************
(2) ShuffledRDD[4] at groupBy at 血缘关系.scala:60 []
 +-(2) MapPartitionsRDD[3] at groupBy at 血缘关系.scala:60 []
    |  MapPartitionsRDD[2] at flatMap at 血缘关系.scala:57 []
    |  Spark_319/src/data/*.txt MapPartitionsRDD[1] at textFile at 血缘关系.scala:54 []
    |  Spark_319/src/data/*.txt HadoopRDD[0] at textFile at 血缘关系.scala:54 []
*****rdd3********************
(2) MapPartitionsRDD[5] at map at 血缘关系.scala:62 []
 |  ShuffledRDD[4] at groupBy at 血缘关系.scala:60 []
 +-(2) MapPartitionsRDD[3] at groupBy at 血缘关系.scala:60 []
    |  MapPartitionsRDD[2] at flatMap at 血缘关系.scala:57 []
    |  Spark_319/src/data/*.txt MapPartitionsRDD[1] at textFile at 血缘关系.scala:54 []
    |  Spark_319/src/data/*.txt HadoopRDD[0] at textFile at 血缘关系.scala:54 []


****rdd*********************
List(org.apache.spark.OneToOneDependency@512575e9)
****rdd1*********************
List(org.apache.spark.OneToOneDependency@617389a)
*****rdd2********************
List(org.apache.spark.ShuffleDependency@348ad293)
*****rdd3********************
List(org.apache.spark.OneToOneDependency@30f74e79)

 

标签:RDD,编程,scala,血缘关系,Rdd,println,Spark,rdd
来源: https://www.cnblogs.com/bajiaotai/p/16086309.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有