sparkstreaming字数错误/语法

tv6aics1  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(409)

我指的是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(字符串)不兼容
以下是详细信息:spark 1.6.1、Java1.7_、EclipseKepler、cdh5.7我尝试过更改jdk版本,并将所有HadoopJAR添加为外部jar、maven依赖项,但这个错误仍然存在。

e7arh2l6

e7arh2l61#

根据flatmapfunction的javadoc,您应该返回 java.lang.Iterable<String> ,您将返回 java.util.Iterator<String> . 因为迭代器没有实现iterable接口,所以代码将不兼容。幸运的是 List 接口确实扩展了 Iterable 接口,所以您所要做的就是:
拆下 .iterator() 从已创建列表的末尾呼叫
修复 call(String x) 拟采用的方法 Iterable<String> 这种从iterator到iterable的变化可能发生在spark的最新版本中,而且这个例子还没有更新。

相关问题