Apache Spark 任务不可序列化
Apache Spark Task not Serializable
我意识到之前有人问过这个问题,但我认为我的失败是由于不同的原因。
List<Tuple2<String, Integer>> results = results.collect();
for (int i=0; i<results.size(); i++) {
System.out.println(results.get(0)._1);
}
Exception in thread "main" org.apache.spark.SparkException: Job aborted due to stage failure: Task not serializable: java.io.NotSerializableException: tools.MAStreamProcessor at org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$failJobAndIndependentStages(DAGScheduler.scala:1214) at
我在 Spark 中有一个简单的 'map/reduce' 程序。上面几行采用 reduce 步骤的结果并循环遍历每个结果元素。如果我将它们注释掉,那么我就不会出错。我远离使用 'forEach' 或简明的 for () 认为底层生成的生成元素是不可序列化的。我已经把它归结为一个简单的 for 循环,所以想知道为什么我仍然 运行 陷入这个错误。
谢谢,
兰吉
使用 -Dsun.io.serialization.extendedDebugInfo=true
标志打开序列化调试日志记录。它会告诉您它无法序列化的具体内容。
答案将与您粘贴的行无关。 collect
不是问题的根源,它只是触发 RDD 计算的原因。如果您不计算 RDD,则不会向执行程序发送任何内容。因此,如果没有 collect
.
,在前面的步骤中意外包含不可序列化的内容不会导致任何问题
我意识到之前有人问过这个问题,但我认为我的失败是由于不同的原因。
List<Tuple2<String, Integer>> results = results.collect();
for (int i=0; i<results.size(); i++) {
System.out.println(results.get(0)._1);
}
Exception in thread "main" org.apache.spark.SparkException: Job aborted due to stage failure: Task not serializable: java.io.NotSerializableException: tools.MAStreamProcessor at org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$failJobAndIndependentStages(DAGScheduler.scala:1214) at
我在 Spark 中有一个简单的 'map/reduce' 程序。上面几行采用 reduce 步骤的结果并循环遍历每个结果元素。如果我将它们注释掉,那么我就不会出错。我远离使用 'forEach' 或简明的 for () 认为底层生成的生成元素是不可序列化的。我已经把它归结为一个简单的 for 循环,所以想知道为什么我仍然 运行 陷入这个错误。
谢谢, 兰吉
使用 -Dsun.io.serialization.extendedDebugInfo=true
标志打开序列化调试日志记录。它会告诉您它无法序列化的具体内容。
答案将与您粘贴的行无关。 collect
不是问题的根源,它只是触发 RDD 计算的原因。如果您不计算 RDD,则不会向执行程序发送任何内容。因此,如果没有 collect
.