一、描述

在书中第二章,有一个例子,构建完之后,运行:

${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

2. Java FlatMapFunction in Spark: error: is not abstract and does not override abstract method call(String) in FlatMapFunction

3. Spark Api

(完)

关于《Spark快速大数据分析》运行例子遇到的报错及解决的更多相关文章

  1. [Java]Java 9运行Spring Boot项目报错的解决办法

    简介 为了学习和尽快掌握 Java 9 的模块化(Module System)新特性,最近安装了 JDK 9,新建了一个 Spring Boot 进行尝试, 过程中遇到了一下报错问题,写下此文谨作为个 ...

  2. 《Spark快速大数据分析》—— 第七章 在集群上运行Spark

  3. [spark 快速大数据分析读书笔记] 第一章 导论

    [序言] Spark 基于内存的基本类型 (primitive)为一些应用程序带来了 100 倍的性能提升.Spark 允许用户程序将数据加载到 集群内存中用于反复查询,非常适用于大数据和机器学习. ...

  4. Spark快速大数据分析之RDD基础

    Spark 中的RDD 就是一个不可变的分布式对象集合.每个RDD 都被分为多个分区,这些分区运行在集群中的不同节点上.RDD 可以包含Python.Java.Scala中任意类型的对象,甚至可以包含 ...

  5. [Spark快速大数据分析]阅读笔记

    第2章 Spark分布式执行涉及的组件 每个Spark应用都由一个驱动程序来发起集群上的各种并行操作,驱动程序通过一个SparkContext对象访问Spark:驱动程序管理多个执行器节点,可以用Sp ...

  6. 《spark快速大数据分析》

    第一 概论 1.spark的特点 适用多种不同分布式平台的场景,包括批处理,迭代算法,交互式查询,流处理: spark提供了python,scale,java等接口 2.spark的组件 spark的 ...

  7. 《Spark快速大数据分析》—— 第五章 数据读取和保存

    由于Spark是在Hadoop家族之上发展出来的,因此底层为了兼容hadoop,支持了多种的数据格式.如S3.HDFS.Cassandra.HBase,有了这些数据的组织形式,数据的来源和存储都可以多 ...

  8. 《Spark快速大数据分析》—— 第六章 Spark编程进阶

    这章讲述了Spark编程中的高级部分,比如累加器和广播等,以及分区和管道...

  9. spark快速大数据分析

    从上层来看,每个Spark 应用都由一个驱动器程序(driver program)来发起集群上的各种并行操作.驱动器程序包含应用的main 函数,并且定义了集群上的分布式数据集,还对这些分布式数据集应 ...

随机推荐

  1. C# 7.0 新特性收集

    1.out-variables(Out变量) 2.Tuples(元组) 3.Pattern Matching(匹配模式) 4.ref locals and returns (局部变量和引用返回) 5. ...

  2. Windows Driver Kit Version 7.1.0 ( 也就是 7600.16385.1 ) 下载地址

    Windows Driver Kit Version 7.1.0 ( 也就是 7600.16385.1 ) 下载地址 http://download.microsoft.com/download/4/ ...

  3. LINK : warning LNK4098: 默认库“LIBCMTD”与其他库的使用冲突;请使用 /NODEFAULTLIB:library

    LINK : warning LNK4098: 默认库“LIBCMTD”与其他库的使用冲突:请使用 /NODEFAULTLIB:library 转自:http://blog.csdn.net/pgms ...

  4. 关于硬件实现FFT逆运算

    前面的文章我们介绍了关于FFT的硬件实现.关于FFT的逆运算IFFT,其实就是将实现FFT的过程反过来执行就可以了. 在实现过程中要注意很多问题. 同 FFT一样,效率问题.以2048点为例,根据理论 ...

  5. 减少TIME_WAIT时间的优化配置

    减少TIME_WAIT时间的优化配置 建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: net.ipv4.tcp_max_syn_backlog=8192 增加TCP S ...

  6. java内存占用问题(一)

    Nocturne 2012-12-24 java数组内存占用问题. 30 Contact[] ca = new Contact[10];   while(x<10){     ca[x]=new ...

  7. offset()和position()

    网上百度都有的说明是 offset():获取匹配元素在当前视口的相对偏移. position():获取匹配元素相对父元素的偏移. 如果单纯写这两句话,这个博客毫无意义 这里我写下他俩的使用情况,希望对 ...

  8. 手游[追忆之青]动画导演:2D动画制作技巧

    转自:http://www.gamelook.com.cn/2016/09/264591 GameLook报道/由一般法人计算机娱乐协会(CESA)主办的CEDEC2016日前在日本横滨举行,诸多开发 ...

  9. node中的ajax提交小例子

    我们看一个HTML5页面中通过AJAX请求的方式获取HTTP服务器返回数据的代码示例.由于我们把服务器的端口指定为1337,并将从端口为80的网站中运行HTML5页面,因此这是一种跨域操作,需要在HT ...

  10. 【BZOJ】2160: 拉拉队排练(Manacher)

    题目 2160: 拉拉队排练 Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长 ...