Spark Streaming Word Count错误/语法

问题描述 投票:-1回答:1

我指的是https://github.com/apache/spark/blob/master/examples/src/main/java/org/apache/spark/examples/streaming/JavaDirectKafkaWordCount.java并尝试构建Spark wordcount示例,但有些代码没有在Eclipse中编译并显示下面的错误。

抛出错误的代码是:


JavaDStream<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
      @Override
      public Iterator<String> call(String x) {
        return Arrays.asList(SPACE.split(x)).iterator();
      }
    });

编译错误:

返回类型与FlatMapFunction.call(String)不兼容

这里有详细信息:Spark 1.6.1,Java 1.7_67,Eclipse Kepler,CDH5.7我尝试过更改JDK版本并将所有Hadoop Jars添加为外部Jar,Maven依赖项,但此错误仍然存​​在。

java hadoop apache-spark spark-streaming word-count
1个回答
5
投票

根据JavaDoc of FlatmapFunction,你应该返回一个java.lang.Iterable<String>,你正在返回一个java.util.Iterator<String>。由于Iterator没有实现Iterable接口,因此代码将不兼容。幸运的是,List界面确实扩展了Iterable界面,所以你要做的就是:

  • 从创建的列表末尾删除.iterator()调用
  • call(String x)方法的返回类型修复为Iterable<String>

这个可能从Iterator到Iterable的更改可能发生在Spark的最新版本中,并且该示例尚未更新。

© www.soinside.com 2019 - 2024. All rights reserved.