首页 > 解决方案 > Spark 任务可序列化异常

问题描述

public static void main(String[] args) {
        List<String> inputData = new ArrayList<>();
        inputData.add("WARN: Tuesday 4 September 0405");
        inputData.add("ERROR: Tuesday 4 September 0408");
        inputData.add("FATAL: Wednesday 5 September 1632");
        inputData.add("ERROR: Friday 7 September 1854");
        inputData.add("WARN: Saturday 8 September 1942");

        Logger.getLogger("org.apache").setLevel(Level.WARN);

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

        sc.parallelize(inputData)
        .flatMap(value -> Arrays.asList(value.split(" ")).iterator())
        .filter(word -> word.length() > 1)
        // Here comes the exception
        .foreach(System.out::println);
        sc.close();
    }  

foreach(s -> System.out.println(s)); --> 工作正常

foreach(System.out::println); --> 线程“主”org.apache.spark.SparkException 中的异常:任务不可序列化

两者都是相同的,后者使用从 java 8 开始的方法引用功能,但它在线程“main”org.apache.spark.SparkException 中产生异常:任务不可序列化,为什么会这样?

标签: javaapache-sparkrdd

解决方案


推荐阅读