diff --git a/core/src/main/scala/org/apache/spark/scheduler/TaskSchedulerImpl.scala b/core/src/main/scala/org/apache/spark/scheduler/TaskSchedulerImpl.scala index 8ce8fb15efbc22922228bcc34f036e66f64d247b..371fb8602f785af59da2cccd2de11a92b0d5f6af 100644 --- a/core/src/main/scala/org/apache/spark/scheduler/TaskSchedulerImpl.scala +++ b/core/src/main/scala/org/apache/spark/scheduler/TaskSchedulerImpl.scala @@ -389,11 +389,6 @@ private[spark] class TaskSchedulerImpl( // (taskId, stageId, stageAttemptId, accumUpdates) val accumUpdatesWithTaskIds: Array[(Long, Int, Int, Seq[AccumulableInfo])] = synchronized { accumUpdates.flatMap { case (id, updates) => - // We should call `acc.value` here as we are at driver side now. However, the RPC framework - // optimizes local message delivery so that messages do not need to de serialized and - // deserialized. This brings trouble to the accumulator framework, which depends on - // serialization to set the `atDriverSide` flag. Here we call `acc.localValue` instead to - // be more robust about this issue. val accInfos = updates.map(acc => acc.toInfo(Some(acc.value), None)) taskIdToTaskSetManager.get(id).map { taskSetMgr => (id, taskSetMgr.stageId, taskSetMgr.taskSet.stageAttemptId, accInfos)