Java 尝试将System.out用作RDD中的任务

Java 尝试将System.out用作RDD中的任务,java,apache-spark,serialization,task,Java,Apache Spark,Serialization,Task,我目前刚刚开始学习ApacheSpark,有一些代码我不太明白为什么不编译。它说我发送到myrddforeach的任务是不可序列化的,但是我正在观看的一个教程也做了类似的事情。任何想法或线索都将不胜感激 public class Main { public static void main(String[] args) { Logger.getLogger("org.apache").setLevel(Level.WARN); List

我目前刚刚开始学习ApacheSpark,有一些代码我不太明白为什么不编译。它说我发送到myrddforeach的任务是不可序列化的,但是我正在观看的一个教程也做了类似的事情。任何想法或线索都将不胜感激

public class Main {
    public static void main(String[] args) {
        Logger.getLogger("org.apache").setLevel(Level.WARN);
        List<Integer> inputData = new ArrayList<>();

        inputData.add(25);


        SparkConf conf = new SparkConf().setAppName("startingSpark").setMaster("local[*]");
        JavaSparkContext sc = new JavaSparkContext(conf);

        JavaRDD<Integer> myRDD = sc.parallelize(inputData);
        Integer result = myRDD.reduce((x, y) -> x + y);

        myRDD.foreach( System.out::println );
        System.out.println(result);

        sc.close();

    }
}

不要使用Lambda引用。它将尝试将
PrintStream
的函数
println(..)
传递给执行器。请记住,您在spark Close中传递或放置的所有方法(在map/filter/reduce等内部)都必须序列化。由于
println(..)
PrintStream
的一部分,因此类
PrintStream
必须序列化

传递一个匿名函数,如下所示-

myRDD.foreach(integer->System.out.println(integer));
完整示例


导入org.apache.log4j.Level;
导入org.apache.log4j.Logger;
导入org.apache.spark.SparkConf;
导入org.apache.spark.api.java.JavaRDD;
导入org.apache.spark.api.java.JavaSparkContext;
导入java.util.ArrayList;
导入java.util.List;
公共类测试63321956{
公共静态void main(字符串[]args){
Logger.getLogger(“org.apache”).setLevel(Level.WARN);
List inputData=new ArrayList();
输入数据。添加(25);
SparkConf conf=new SparkConf().setAppName(“startingSpark”).setMaster(“local[*]);
JavaSparkContext sc=新的JavaSparkContext(conf);
JavaRDD myRDD=sc.parallelize(inputData);
整数结果=myRDD.reduce(整数::和);
myRDD.collect().forEach(System.out::println);
myRDD.foreach(integer->System.out.println(integer));
系统输出打印项次(结果);
/**
* 25
* 25
* 25
*/
sc.close();
}
}
Exception in thread "main" org.apache.spark.SparkException: Task not serializable...
    at com.virtualpairprogrammers.Main.main(Main.java:26)
Caused by: java.io.NotSerializableException: java.io.PrintStream
Serialization stack:
    - object not serializable (class: java.io.PrintStream, value: java.io.PrintStream@11a82d0f)
    - element of array (index: 0)
    - array (class [Ljava.lang.Object;, size 1)...