为什么作业条目显示在 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,它不会触发作业,即使这两个操作都会导致混洗。所以这里有两个关键问题。
- 为什么转换 sortByKey 导致作业触发?
- 为什么 groupByKey 不触发作业而只有 sortByKey 触发作业,当这两个转换都导致混洗时?
Because this is a bug...就这么简单:)
我有一个文本文件作为来源:-
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,它不会触发作业,即使这两个操作都会导致混洗。所以这里有两个关键问题。
- 为什么转换 sortByKey 导致作业触发?
- 为什么 groupByKey 不触发作业而只有 sortByKey 触发作业,当这两个转换都导致混洗时?
Because this is a bug...就这么简单:)