Java SparkStreaming字数错误/语法

Java SparkStreaming字数错误/语法,java,hadoop,apache-spark,spark-streaming,word-count,Java,Hadoop,Apache Spark,Spark Streaming,Word Count,我正在引用并尝试构建Spark wordcount示例,但有些代码没有在Eclipse中编译,下面显示了错误 引发错误的代码是: JavaDStream words=lines.flatMap(新的flatMap函数(){ @凌驾 公共迭代器调用(字符串x){ 返回Arrays.asList(SPACE.split(x)).iterator(); } }); 编译错误: 返回类型与不兼容 FlatMapFunction.call(字符串) 以下是详细信息:Spark 1.6.1、Java1

我正在引用并尝试构建Spark wordcount示例,但有些代码没有在Eclipse中编译,下面显示了错误

引发错误的代码是:


JavaDStream words=lines.flatMap(新的flatMap函数(){
@凌驾
公共迭代器调用(字符串x){
返回Arrays.asList(SPACE.split(x)).iterator();
}
});

编译错误:

返回类型与不兼容 FlatMapFunction.call(字符串)

以下是详细信息:Spark 1.6.1、Java1.7_67、EclipseKepler、CDH5.7 我尝试更改JDK版本,并将所有Hadoop Jar添加为外部Jar、Maven依赖项,但此错误仍然存在。

根据,您应该返回一个
java.lang.Iterable
,并且返回一个
java.util.Iterator
。 由于迭代器没有实现Iterable接口,因此代码将不兼容。幸运的是,
List
接口确实扩展了
Iterable
接口,因此您所要做的就是:

  • 从创建的列表末尾删除
    .iterator()
    调用
  • 调用(字符串x)
    方法的返回类型固定为
    Iterable

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

这样更简单:因为它使用了Java 8 lambdas,所以更简单。但是OP说他使用的是Java1.7,而Java1.7不支持它们。
JavaDStream<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
      @Override
      public Iterator<String> call(String x) {
        return Arrays.asList(SPACE.split(x)).iterator();
      }
    });