aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/src/main/scala/org/apache/spark/ui/jobs/StageTable.scala19
1 files changed, 16 insertions, 3 deletions
diff --git a/core/src/main/scala/org/apache/spark/ui/jobs/StageTable.scala b/core/src/main/scala/org/apache/spark/ui/jobs/StageTable.scala
index ea806d09b6..2a1c3c1a50 100644
--- a/core/src/main/scala/org/apache/spark/ui/jobs/StageTable.scala
+++ b/core/src/main/scala/org/apache/spark/ui/jobs/StageTable.scala
@@ -145,9 +145,22 @@ private[ui] class StageTableBase(
case None => "Unknown"
}
val finishTime = s.completionTime.getOrElse(System.currentTimeMillis)
- val duration = s.submissionTime.map { t =>
- if (finishTime > t) finishTime - t else System.currentTimeMillis - t
- }
+
+ // The submission time for a stage is misleading because it counts the time
+ // the stage waits to be launched. (SPARK-10930)
+ val taskLaunchTimes =
+ stageData.taskData.values.map(_.taskInfo.launchTime).filter(_ > 0)
+ val duration: Option[Long] =
+ if (taskLaunchTimes.nonEmpty) {
+ val startTime = taskLaunchTimes.min
+ if (finishTime > startTime) {
+ Some(finishTime - startTime)
+ } else {
+ Some(System.currentTimeMillis() - startTime)
+ }
+ } else {
+ None
+ }
val formattedDuration = duration.map(d => UIUtils.formatDuration(d)).getOrElse("Unknown")
val inputRead = stageData.inputBytes