@Override public List<List<String>> rows() { List<List<String>> progressRows = new ArrayList<>(); SortedSet<SparkStage> keys = new TreeSet<SparkStage>(progressMap.keySet()); for (SparkStage stage : keys) { SparkStageProgress progress = progressMap.get(stage); final int complete = progress.getSucceededTaskCount(); final int total = progress.getTotalTaskCount(); final int running = progress.getRunningTaskCount(); final int failed = progress.getFailedTaskCount(); SparkJobMonitor.StageState state = total > 0 ? SparkJobMonitor.StageState.PENDING : SparkJobMonitor.StageState.FINISHED; if (complete > 0 || running > 0 || failed > 0) { if (complete < total) { state = SparkJobMonitor.StageState.RUNNING; } else { state = SparkJobMonitor.StageState.FINISHED; } } String attempt = String.valueOf(stage.getAttemptId()); String stageName = "Stage-" +String.valueOf(stage.getStageId()); String nameWithProgress = getNameWithProgress(stageName, complete, total); final int pending = total - complete - running; progressRows.add(Arrays .asList(nameWithProgress, attempt, state.toString(), String.valueOf(total), String.valueOf(complete), String.valueOf(running), String.valueOf(pending), String.valueOf(failed), "")); } return progressRows; }