java - 异常: SparkException: Task not serializable

标签 java apache-spark

为什么这段代码会产生这个异常?怎样才能避免呢

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

    List<Tuple2<Integer, Integer>> visitsRaw = new ArrayList<>();
    visitsRaw.add(new Tuple2<>(4, 18));
    visitsRaw.add(new Tuple2<>(6, 4));
    visitsRaw.add(new Tuple2<>(10, 9));

    List<Tuple2<Integer, String>> usersRaw = new ArrayList<>();
    usersRaw.add(new Tuple2<>(1, "John"));
    usersRaw.add(new Tuple2<>(2, "Bob"));
    usersRaw.add(new Tuple2<>(3, "Alan"));
    usersRaw.add(new Tuple2<>(4, "Doris"));
    usersRaw.add(new Tuple2<>(5, "Marybelle"));
    usersRaw.add(new Tuple2<>(6, "Raquel"));

    JavaPairRDD<Integer, Integer> visits = sc.parallelizePairs(visitsRaw);
    JavaPairRDD<Integer, String> users = sc.parallelizePairs(usersRaw);

    JavaPairRDD<Integer, Tuple2<Integer, String>> joinedRdd = visits.join(users);

    joinedRdd.foreach(System.out::println);
    sc.close();

最佳答案

子句“System.out::println”不可序列化,可以更改为:

joinedRdd.foreach(v->System.out.println(v));

或者对于驱动程序节点上的打印值,可以使用这样的构造:

joinedRdd.collect().forEach(System.out::println);

关于java - 异常: SparkException: Task not serializable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58873321/

相关文章:

hadoop - 如何在 Java 中获取 Spark 执行器的工作目录?

java - 为什么当我尝试添加分割的字符串时得到空字符串?

java - 为什么我无法插入可比较的文件对象?

java - 操作系统中的进程和线程调度

apache-spark - MLlib 到 Breeze 向量/矩阵对于 org.apache.spark.mllib 范围是私有(private)的吗?

Java Spark提交: Exception thrown in awaitResult

hadoop - 垃圾检查点间隔如何在 hadoop 中工作?为什么需要 checkpoint_intereval?

java - 将 InputStream 转换为 JSONObject

java用户输入分配给变量不能是要除的整数?

java - spark checkpoint ".bk"和 ".crc"文件的功能是什么?