关于《Spark快速大数据分析》运行例子遇到的报错及解决
2024-10-20 00:23:11
一、描述
在书中第二章,有一个例子,构建完之后,运行:
${SPARK_HOME}/bin/spark-submit --class com.oreilly.learningsparkexamples.mini.java.WordCount ./target/learning-spark-mini-example-0.0.1.jar ./README.md ./wordcouts
如果用的spark版本与书中用到的不一样的话,就会出现各种问题,譬如书中用的是1.2.0而我用的是最新的2.3.0。
二、问题及解决
1. 第一次编译的时候,出现类似下面的报错:
ERROR Executor: Exception in task 0.0 in stage 0.0 (TID 0)
java.lang.AbstractMethodError: com.oreilly.learningsparkexamples.mini.java.WordCount$1.call(Ljava/lang/Object;)Ljava/util/Iterator;
....
首先是解决版本依赖的问题:
(1)获得spark-core的版本和spark的版本,通过查看以下路径获得:
${SPARK_HOME}/jars/spark-core_x.xx-y.y.y.jar
(2)修改mini-complete-example目录下的pom.xml,把刚才查看到的版本号替换原来的:
<dependency> <!-- Spark dependency -->
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_x.xx</artifactId>
<version>y.y.y</version>
<scope>provided</scope>
</dependency>
重新编译。
2. 第二次编译估计会遇到下面的报错:
Java FlatMapFunction in Spark: error: is not abstract and does not override abstract method call(String) in FlatMapFunction
......
定位到出错的句子:
JavaRDD<String> words = input.flatMap(
new FlatMapFunction<String, String>() {
public Iterable<String> call(String x) {
return Arrays.asList(x.split(" "));
}});
又查了一下书里关于FlatMapFunction<T, R>()接口的继承规则,没发现错误,转念一下,可能又是版本不一样造成的。查了一下最新版本的api,发现需要实现的方法的返回类型变了:
java.util.Iterator<R> call(T t)
是一个Iterator<R>而不是Iterable<R>,对症下药:
(1)导入Iterator包:
import java.util.Iterator;
(2)把出错的句子修改成:
JavaRDD<String> words = input.flatMap(
new FlatMapFunction<String, String>() {
@Override public Iterator<String> call(String x) {
return Arrays.asList(x.split(" ")).iterator();
}});
重新编译,打包:
mvn compile && mvn package
然后再运行,问题解决
三、参考
1. Apache Spark: ERROR Executor –> Iterator
3. Spark Api
(完)
最新文章
- [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二)
- 调用altera IP核的仿真流程—上
- XCod5 SVN
- Codeforces Round #381(div 2)
- Mysql 创建用户 授权
- C# File
- BW知识点总结及面试要点
- wxwidgets demo
- Longest Substring Without Repeating Characters 最长不重复子串
- ios的自动转屏
- 基于Metronic的Bootstrap开发框架经验总结(15)-- 更新使用Metronic 4.75版本
- Asp.net mvc 中的路由
- MSSQL 复制数据 并随机打乱写入
- mybatis中设置打印sql语句application.yml
- 仿XP系统的任务栏菜单
- cut命令详解
- STL进阶--删除元素
- Spring是什么、spring容器、Spring三大核心思想DI(依赖注入)、IOC(控制反转)、AOP(面向切面编程)
- php单双引号嵌套解决方案
- python获取文件