我指的是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依赖项,但这个错误仍然存在。
1条答案
按热度按时间e7arh2l61#
根据flatmapfunction的javadoc,您应该返回
java.lang.Iterable<String>
,您将返回java.util.Iterator<String>
. 因为迭代器没有实现iterable接口,所以代码将不兼容。幸运的是List
接口确实扩展了Iterable
接口,所以您所要做的就是:拆下
.iterator()
从已创建列表的末尾呼叫修复
call(String x)
拟采用的方法Iterable<String>
这种从iterator到iterable的变化可能发生在spark的最新版本中,而且这个例子还没有更新。