第五章_Spark核心编程_Rdd_血缘关系
2022/4/1 14:19:42
本文主要是介绍第五章_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)
这篇关于第五章_Spark核心编程_Rdd_血缘关系的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26消息中间件源码剖析教程
- 2024-11-26JAVA语音识别项目资料的收集与应用
- 2024-11-26Java语音识别项目资料:入门级教程与实战指南
- 2024-11-26SpringAI:Java 开发的智能新利器
- 2024-11-26Java云原生资料:新手入门教程与实战指南
- 2024-11-26JAVA云原生资料入门教程
- 2024-11-26Mybatis官方生成器资料详解与应用教程
- 2024-11-26Mybatis一级缓存资料详解与实战教程
- 2024-11-26Mybatis一级缓存资料详解:新手快速入门
- 2024-11-26SpringBoot3+JDK17搭建后端资料详尽教程