黑猴子的家:Spark RDD 依赖关系

RDD和它依赖的父RDD(s)的关系有两种不同的类型,即窄依赖(narrow dependency)宽依赖(wide dependency)

9193428-a80d7f7ef3621784.png
1、窄依赖

窄依赖指的是,每一个父RDD的Partition最多被子RDD的一个Partition使用
总结:窄依赖我们形象的比喻为独生子女(不引起Shuffle过程)

2、宽依赖

宽依赖指的是,多个子RDD的Partition会依赖同一个父RDD的Partition,会引起shuffle
总结:宽依赖我们形象的比喻为超生,或者说,父RDD的一个分区被多个子RDD的分区所使用。(会引起shuffle过程),类似**ByKey基本上都会引起Shuffle。

3、Lineage

RDD只支持粗粒度转换,即在大量记录上执行的单个操作。将创建RDD的一系列Lineage(即血统)记录下来,以便恢复丢失的分区。RDD的Lineage会记录RDD的元数据信息和转换行为,当该RDD的部分分区数据丢失时,它可以根据这些信息来重新运算和恢复丢失的数据分区。


9193428-e34846b49414c752.png
scala> val textRDD = sc.textFile("./README.md")
textRDD: org.apache.spark.rdd.RDD[String] 
            = ./README.md MapPartitionsRDD[1] at textFile at <console>:24

scala> val words = textRDD.flatMap(_.split(" "))
words: org.apache.spark.rdd.RDD[String] 
            = MapPartitionsRDD[2] at flatMap at <console>:26

scala> val mapRDD = words.map((_,1))
mapRDD: org.apache.spark.rdd.RDD[(String, Int)] 
            = MapPartitionsRDD[4] at map at <console>:28

scala> val resultRDD = mapRDD.reduceByKey(_+_)
resultRDD: org.apache.spark.rdd.RDD[(String, Int)] 
            = ShuffledRDD[5] at reduceByKey at <console>:30

scala> resultRDD.dependencies
res1: Seq[org.apache.spark.Dependency[_]] 
            = List(org.apache.spark.ShuffleDependency@14726e69)

scala> mapRDD.dependencies
res2: Seq[org.apache.spark.Dependency[_]] 
            = List(org.apache.spark.OneToOneDependency@a638f45)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值