Spark Distinct操作的DAG问题

问题

我创建了一个分成两个节点的List

val list = sc.parallelize(List(1,1,1,1,2,2,2,3,3,4),2)

现在对其进行distinct操作

list.distinct.collect

执行时的DAG图如下所示
图片描述

请问,这个Stage0中的distinct与Stage1中的distinct的区别。

我是这么理解的,首先distinct在各个节点做一次transformation,然后再shuffle做一次transformation。不知道是否正确。

阅读 5.2k
1 个回答
  1. spark 不同stage 之间的划分原则是是否有shuffle操作。

  2. 这里的不是进行了两次 distinct操作,而是一个distinct操作被划分为两个stage,因为有distinct操作需要shuffle。

  3. 如果你仔细看stage0的话,你会发现这里进行的distinct 是mapPartitions。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进