我引用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,Java 1.7_67,Eclipse Kepler,CDH5.7 我尝试过更改JDK版本并将所有Hadoop Jars添加为外部Jar,Maven依赖项,但此错误仍然存在。
答案 0 :(得分: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的最新版本中,并且该示例尚未更新。