Spark 任务不能用简单的累加器序列化?

Spark Task not Serializable with simple accumulator?

我是运行这个简单的代码:

val accum = sc.accumulator(0, "Progress");
listFilesPar.foreach {
  filepath =>
    accum += 1
}

listFilesPar 是一个 RDD[String]

会引发以下错误:

org.apache.spark.SparkException: Task not serializable

现在我不明白发生了什么 而且我没有放圆括号,而是放方括号,因为我需要编写一个冗长的函数。我只是在做单元测试

这种情况的典型原因是闭包意外地捕获了一些东西。一些你没有包含在你的粘贴中的东西,因为你永远不会期望它会被序列化。

您可以尝试减少代码直到找到它。或者只使用 -Dsun.io.serialization.extendedDebugInfo=true 打开序列化调试日志记录。您可能会在输出中看到 Spark 试图序列化一些愚蠢的东西。