为什么作业条目显示在 Spark UI 中,对于 RDD,只有转换而没有操作

Why Job entry shows up in Spark UI for RDD with only transformations and no actions

我有一个文本文件作为来源:-

key1,value1
key2,value2
key3,value3
key4,value4

我在 Scala 中定义了以下 RDD shell:-

 val rdd=sc.textFile("sample.txt").map(_.split(",")).map(x=>( x(0),x(1) )).sortByKey()

如您所见,这里只有转换,没有动作。根据 Spark 的懒惰评估规则,它不应触发任何工作。但是这个声明本身正在触发一个工作,我可以从 Spark UI 中创建的新工作条目中确认。有趣的是,这是由 sortByKey 操作引起的。我知道 sortByKey 会导致跨分区混洗。但这也应该只有在最终调用一个动作时才会发生。另一个谜团是,如果我用 groupByKey 替换 sortByKey,它不会触发作业,即使这两个操作都会导致混洗。所以这里有两个关键问题。

  1. 为什么转换 sortByKey 导致作业触发?
  2. 为什么 groupByKey 不触发作业而只有 sortByKey 触发作业,当这两个转换都导致混洗时?

Because this is a bug...就这么简单:)