【spark原理系列】Spark 窄依赖 宽依赖 定义示例源码(你记不住是全网都说错了!!!)

本文详细介绍了Spark中窄依赖和宽依赖的定义,强调了窄依赖的关键特征,并提供了相关算子示例。文章还讨论了Stage的划分原则,指出Stage的边界依据宽依赖设定,确保并行执行。最后,文章深入源码层面,剖析了依赖关系的实现类,包括 NarrowDependency、ShuffleDependency 和 OneToOneDependency 的细节。
摘要由CSDN通过智能技术生成

Spark 窄依赖 宽依赖 定义示例源码(你记不住是全网都说错了!!!)点击这里看全文

定义

子RDD依赖小数量的父RDD的分区的依赖叫做窄依赖。依赖的越少越窄。

---------------------------------------记种这句话,就永远不会忘记怎么区分窄依赖宽依赖了

子RDD依赖最多(也就是所有)父RDD的分区的依赖叫做宽依赖

子RDD依赖小数量(也就是所有)父RDD的分区的依赖叫做窄依赖

子RDD依赖最小数量(也就是1个)父RDD的分区的依赖叫做窄依赖

不信可以看下边窄依赖的源码注释!!!!!

/**
 * :: DeveloperApi ::
 * Base class for dependencies where each partition of the child RDD depends on a small number
 * of partitions of the parent RDD. Narrow dependencies allow for pipelined execution.
 */
@DeveloperApi
abstract class NarrowDependency[T](_rdd: RDD[T]) extends Dependency[T] {
   
  /**
   * Get the parent partitions for a child partition.
   * @param partitionId a partition of the child RDD
   * @return the partitions of the parent RDD that the child partition depends upon
   */
  def getParents(partitionId: Int): Seq[Int]

  override def rdd: RDD[T] = _rdd
}

示例

  • 宽依赖的算子 :join(非hash-partitioned)、groupByKey、partitionBy

  • 窄依赖的算子 :map、filter、union、join(hash-partitioned)、mapPartitions;

Understanding Narrow and Wide Transformations in Apache Spark

请结合定义思考示例的合理性。

Stage如何划分

在Spark中,DAG(有向无环图)表示了作业的执行计划,由一系列RDD和它们之间的转换操作组成。当遇到宽依赖时,Spark会将DAG划分为多个Stage,以实现并行执行。

每个Stage包含一组任务,这些任务可以并行执行。每个任务对应于输入RDD的一个分区,它执行相同的转换操作,并生成输出RDD的一个分区。这样,每个Stage可以独立地处理其输入分区,而无需等待其他Stage的完成。

Stage的划分是根据宽依赖来进行的。宽依赖表示子RDD的每个分区依赖于父RDD的所有分区,即需要进行数据洗牌和重新分区的情况。在这种情况下,Spark会将具有相同宽依赖的RDD划分到同一个Stage中,以确保在执行Shuffle操作之前,所有必要的数据都已经准备好。

通过将DAG划分为多个Stage,并将任务并行化执行,Spark能够最大程度地提高作业的执行效率和性能。这种并行执行的方式充分利用了集群中的资源,同时还能减少数据传输和等待时间,提高整体计算速度。

源码

package org.apache.spark

import scala.reflect.ClassTag

import org.apache.</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BigDataMLApplication

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值