spark - 宽依赖和窄依赖

(1)血缘关系:

通过血缘关系,可以知道一个RDD是如何从父RDD计算过来的

A  =map=> B =filter=> C

(2)窄依赖:一个父RDD的partition最多被子RDD中的partition使用一次(一父对应一子),窄依赖无shuffle



 

(3)宽依赖:

父RDD中的一个partition会被子RDD中的partition使用多次(一父多子)

宽依赖有shuffle,一个shuffle会拆成一个stage,2个shuffle拆成3个stage



 

以wordcount为例(reduceBykey是宽依赖,把stage拆为2个stage;stage序号从0开始,每个stage最后一个操作的名字作为整个stage的名字 ):

sc.textFile("/in/1.txt").flatMap(_.split("\t")).map((_,1)).reduceByKey(_+_).collect
 

分析:

wordcount例子里,reduceByKey相当于把相同的key分到一个partition上去,然后在partition上做加和,

因为并不是同一个相同key都在一个partition里,可能在不同机器上,所以需要有shuffle过程,reduceByKey在shuffle前本地会做一个预聚合

(4)会引起shuffle的操作



 

(5)spark中的join是宽依赖还是窄依赖?

co-partitioned 是窄依赖,其他是宽依赖

猜你喜欢

转载自coderlxl201209164551.iteye.com/blog/2414174