RDD宽依赖、窄依赖&DAG

Spark窄依赖与宽依赖解析
本文详细解析了Spark中的窄依赖与宽依赖概念,包括它们的特点、应用场景及对DAG图的影响。窄依赖适用于数据处理可在单机内存内完成的情况,而宽依赖则涉及shuffle操作,可能引发数据重复计算问题。

窄依赖:

每个父RDD中的partition最多被子RDD中的一个Partition所使用;子RDD中partition的个数大于等于父RDD中partition的个数

  1. 父RDD与子RDD是一对一的依赖关系(OneToOneDependency):map、filter、join with inputs co-partitioned;
    注:子RDD只依赖父RDD中相同partitionID的partition
  2. 父RDD与子RDD是一对一的范围内依赖关系(RangeDependency):union

宽依赖:

一个父RDD的partition会被多个子RDD的partition所使用,会导致计算中产生shuffle;

  • eg:groupByKey、join with inputs not co-partitioned
  • 存在问题:由于一个父RDD的一个partition对应子RDD的多个partition,会出现部分计算结果丢失,单一计算丢失的数据无法达到效果,便重新计算该步骤中的所有数据,从而导致计算数据重复。

注意:

宽依赖一定有shuffle,有shuffle不一定是宽依赖; 
两个要join的rdd的partition数相同,这种情况是窄依赖,其余情况的join都是宽依赖

DAG

生成重点是stage划分,划分依据是RDD之间的依赖关系;
程序提交后,高度调度器将所有RDD看成一个stage,对此stage从后往前回溯,遇到shuffle就断开,遇到窄依赖则归并到同一个stage,等所有步骤回溯完成,则形成一个DAG图

  • 窄依赖:RDD之间的数据不需要shuffle,多个数据处理可以在同一台机器的内存中完成,所以在spark中被划分为同一个stage;
  • 宽依赖:由于shuffle的存在,必须等到父RDD的shuffle处理完后才开始接下来的计算,所以会在此处划分stage;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值