Apache spark 在SPARK中,为什么狭义依赖严格意义上不';你不需要在网络上使用schuffle吗?

Apache spark 在SPARK中,为什么狭义依赖严格意义上不';你不需要在网络上使用schuffle吗?,apache-spark,networking,dependencies,rdd,partitioning,Apache Spark,Networking,Dependencies,Rdd,Partitioning,我在读一篇关于跨多个分区的RDD的文章 我的问题是:我不明白为什么用狭窄的依赖关系构建的RDD不需要网络上的schuffle?还是说洗牌确实发生了,但只发生了几次 请参考下图- 假设子RDD是从父RDD创建的,具有窄依赖关系,如下面的红色矩形所示。现在,父RDD有3个分区,比方说(P1、P2、P3),每个分区中的数据分别映射到其他3个分区,比方说(P1、P4、P5) 因为,父RDD分区P1中的数据被映射到自身,所以在网络上没有混洗。但是,由于来自父RDD分区P2和P3的数据被映射到子RDD分区

我在读一篇关于跨多个分区的RDD的文章

我的问题是:我不明白为什么用狭窄的依赖关系构建的RDD不需要网络上的schuffle?还是说洗牌确实发生了,但只发生了几次

请参考下图-

假设子RDD是从父RDD创建的,具有窄依赖关系,如下面的红色矩形所示。现在,父RDD有3个分区,比方说(P1、P2、P3),每个分区中的数据分别映射到其他3个分区,比方说(P1、P4、P5)

因为,父RDD分区P1中的数据被映射到自身,所以在网络上没有混洗。但是,由于来自父RDD分区P2和P3的数据被映射到子RDD分区P4和P5,它们是不同的分区,因此数据自然必须通过网络才能在P4和P5中放置相应的值。因此,我们为什么说网络上没有洗牌

请参见绿色框,这是更复杂的情况。我能想象的唯一一种情况是,当父RDD分区映射到自身时,网络上就不会出现混乱

我确信我的推理是错误的。有人能解释一下吗?
谢谢

狭义依赖并不意味着没有网络流量

窄与宽之间的区别更为微妙:

  • 由于具有广泛的依赖性,每个子分区都依赖于其父分区的每个分区。这是一种多对多的关系
  • 对于窄依赖关系,每个子分区最多依赖于来自每个父分区的一个分区。它可以是一对一或多对一的关系

是否需要网络流量取决于转换以外的其他因素。例如,如果在同一操作期间发生了混洗(在本例中,同时存在共分区和共定位),则可以在没有网络流量的情况下加入共分区RDD,或者加入网络流量。

狭义依赖并不意味着没有网络流量

窄与宽之间的区别更为微妙:

  • 由于具有广泛的依赖性,每个子分区都依赖于其父分区的每个分区。这是一种多对多的关系
  • 对于窄依赖关系,每个子分区最多依赖于来自每个父分区的一个分区。它可以是一对一或多对一的关系

是否需要网络流量取决于转换以外的其他因素。例如,如果在同一操作期间发生洗牌(在本例中,同时存在共分区和共定位),则可以在没有网络流量的情况下加入共分区RDD,或者加入网络流量。

来自您提供的链接:

典型的执行顺序如下所示。。。RDD最初是从外部数据源(如HDF、本地文件等)创建的。RDD经历一系列转换(如map、flatMap、filter、groupBy、join),每个都提供一个不同的RDD,供下一次转换使用。最后一步是一个操作(如计数、收集、保存、获取),将最后一个RDD转换为外部数据源的输出。上述处理序列称为沿袭(DAG拓扑排序的结果)

现在想想数据在管道中传输时是如何处理的

如果存在狭窄的依赖关系,则子分区仅依赖于一个父分区。父分区的数据可以在一台机器上处理,子分区可以在同一台机器上存在。不需要对数据进行洗牌


如果存在广泛的依赖关系,则1个子分区依赖于多个父分区。父分区可能存在于许多计算机上,因此必须在网络上对数据进行洗牌,以完成数据处理。

来自您提供的链接:

典型的执行顺序如下所示。。。RDD最初是从外部数据源(如HDF、本地文件等)创建的。RDD经历一系列转换(如map、flatMap、filter、groupBy、join),每个都提供一个不同的RDD,供下一次转换使用。最后一步是一个操作(如计数、收集、保存、获取),将最后一个RDD转换为外部数据源的输出。上述处理序列称为沿袭(DAG拓扑排序的结果)

现在想想数据在管道中传输时是如何处理的

如果存在狭窄的依赖关系,则子分区仅依赖于一个父分区。父分区的数据可以在一台机器上处理,子分区可以在同一台机器上存在。不需要对数据进行洗牌


如果存在广泛的依赖关系,则1个子分区依赖于多个父分区。父分区可能存在于许多机器上,因此必须在网络上对数据进行洗牌,以完成数据处理。

让我用一个类比来说明分区。 如果您有一组文档,并希望对其进行筛选以识别所有未正确填写的文档,则这相当于执行筛选操作。为了加快操作,您将文档集分发给三个人,这样他们每个人都有一个文档分区。然后,每个人都会筛选给他们的文档子集(在输入框中),并将未正确填写的文档放入输出框中。 每个人执行的操作使得输出框的内容仅取决于提供给他们的输入框;其他人的输入框与输出无关。因此不需要网络传输


希望这能解释。

< P>让我举例说明PAR。