@@ -3,8 +3,8 @@ package ch.cern.sparkmeasure
33import org .apache .spark .sql .{DataFrame , SparkSession }
44import org .slf4j .LoggerFactory
55
6- import scala .collection .JavaConverters .mapAsJavaMap
76import scala .collection .mutable .{LinkedHashMap , ListBuffer }
7+ import scala .jdk .CollectionConverters ._
88import scala .math .{max , min }
99
1010/**
@@ -109,7 +109,7 @@ case class StageMetrics(sparkSession: SparkSession) {
109109
110110 // Transforms aggregateStageMetrics output in a Java Map, needed by the Python API
111111 def aggregateStageMetricsJavaMap (): java.util.Map [String , Long ] = {
112- mapAsJavaMap( aggregateStageMetrics())
112+ aggregateStageMetrics().asJava
113113 }
114114
115115 // Extracts stages and their duration
@@ -167,7 +167,7 @@ case class StageMetrics(sparkSession: SparkSession) {
167167 def reportMemory (): String = {
168168 import scala .collection .mutable .ListBuffer
169169
170- var result = ListBuffer [String ]()
170+ val result = ListBuffer [String ]()
171171 val stages = listenerStage.stageMetricsData.map(_.stageId).sorted
172172
173173 // Append detailed stage-level executor metrics,
@@ -177,7 +177,12 @@ case class StageMetrics(sparkSession: SparkSession) {
177177 stages.foreach { stageId =>
178178 executorMetricsNames.foreach { metric =>
179179 try {
180- val stageExecutorMetricsRaw = listenerStage.stageIdtoExecutorMetrics(stageId, metric)
180+ val stageExecutorMetricsRaw = listenerStage.stageIdtoExecutorMetrics.get((stageId, metric)) match {
181+ case Some (metrics) => metrics
182+ case None =>
183+ logger.warn(s " No executor metrics found for stage $stageId and metric $metric. " )
184+ ListBuffer .empty[(String , Long )]
185+ }
181186
182187 if (stageExecutorMetricsRaw.isEmpty) {
183188 // Handle gracefully if no data was returned
0 commit comments