Spark Task不能使用简单的累加器进行序列化?

Ste*_*ane 3 scala accumulator apache-spark

我正在运行这个简单的代码:

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

listFilesPar是一个 RDD[String]

这会引发以下错误:

org.apache.spark.SparkException: Task not serializable
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*bos 6

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

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