java - 异常:SparkException:任务不可序列化
问题描述
为什么这段代码会产生这个异常?我怎样才能避免它
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));
或者对于 Driver 节点上的打印值,可以使用这样的构造:
joinedRdd.collect().forEach(System.out::println);
推荐阅读
- python-3.x - Anaconda 大量删除大量标准库(numpy、pandas、matplotlib 等)
- cassandra - 获取表格状态(如总行数)和当前工作量(如 Cassandra 的 op/s)的最佳方式?
- c# - 间歇性“InteropServices.COMException / ForwardCallToInvokeMember”访问 Range 单元格上的 Value2
- excel - 在 A 列中的所有 URL 上进行 Webscrape 循环
- google-apps-script - 有没有办法在谷歌应用脚本中与谷歌财务数据进行交互?
- sql - 以非常具体的方式对某些查询结果进行排序
- docker - Dockerized lambda:调用 sam 本地调用返回一个无法导入模块“索引”:Dockerized
- swift - Swift 中的“of”关键字有什么用?
- java - 使用 Fernet 对 java 进行对称加密
- python - 删除空括号并获取值