Github user edwinalu commented on a diff in the pull request:
https://github.com/apache/spark/pull/21221#discussion_r195542018
--- Diff: core/src/main/scala/org/apache/spark/status/api/v1/api.scala ---
@@ -98,14 +101,53 @@ class ExecutorSummary private[spark](
val removeReason: Option[String],
val executorLogs: Map[String, String],
val memoryMetrics: Option[MemoryMetrics],
- val blacklistedInStages: Set[Int])
+ val blacklistedInStages: Set[Int],
+ @JsonSerialize(using = classOf[PeakMemoryMetricsSerializer])
+ @JsonDeserialize(using = classOf[PeakMemoryMetricsDeserializer])
+ val peakMemoryMetrics: Option[Array[Long]])
class MemoryMetrics private[spark](
val usedOnHeapStorageMemory: Long,
val usedOffHeapStorageMemory: Long,
val totalOnHeapStorageMemory: Long,
val totalOffHeapStorageMemory: Long)
+/** deserialzer for peakMemoryMetrics: convert to array ordered by metric
name */
+class PeakMemoryMetricsDeserializer extends
JsonDeserializer[Option[Array[Long]]] {
+ override def deserialize(
+ jsonParser: JsonParser,
+ deserializationContext: DeserializationContext): Option[Array[Long]]
= {
+ val metricsMap = jsonParser.readValueAs(classOf[Option[Map[String,
Object]]])
+ metricsMap match {
+ case Some(metrics) =>
+ Some(MetricGetter.values.map { m =>
+ metrics.getOrElse (m.name, 0L) match {
+ case intVal: Int => intVal.toLong
+ case longVal: Long => longVal
+ }
+ }.toArray)
+ case None => None
+ }
+ }
+}
+
+/** serializer for peakMemoryMetrics: convert array to map with metric
name as key */
+class PeakMemoryMetricsSerializer extends
JsonSerializer[Option[Array[Long]]] {
+ override def serialize(
+ metrics: Option[Array[Long]],
+ jsonGenerator: JsonGenerator,
+ serializerProvider: SerializerProvider): Unit = {
+ metrics match {
+ case Some(m) =>
+ val metricsMap = (0 until MetricGetter.values.length).map { idx =>
--- End diff --
It's still being used in JsonProtocol.executorMetricsToJson -- let me know
if you'd like me to convert that to use values instead.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]