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


    一、描述

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

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

    (完)

  • 相关阅读:
    BZOJ1691: [Usaco2007 Dec]挑剔的美食家
    BZOJ1584: [Usaco2009 Mar]Cleaning Up 打扫卫生
    BZOJ3057: 圣主的考验
    BZOJ1770: [Usaco2009 Nov]lights 燈
    1710: [Usaco2007 Open]Cheappal 廉价回文
    「Poetize7」电话线路
    「Poetize6」Candle
    「Poetize5」水叮当的舞步
    解题:CF983A Finite or not
    解题:POI 2013 Triumphal arch
  • 原文地址:https://www.cnblogs.com/harrymore/p/8991742.html
Copyright © 2020-2023  润新知