2016-05-09 8 views
-1

私はhttps://github.com/apache/spark/blob/master/examples/src/main/java/org/apache/spark/examples/streaming/JavaDirectKafkaWordCount.javaを参照していて、Spark wordcountの例を作成しようとしていますが、Eclipseでコンパイルしていないコードがいくつかあります。SparkStreaming WordCountエラー/文法

エラーを投げているコードは次のとおりです。


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

コンパイルエラー:

The return type is incompatible with FlatMapFunction.call(String)

ここでは詳細です:スパーク1.6.1、Javaの1.7_67、Eclipseのケプラーは、 、CDH5.7 私はJDKのバージョンを変更し、外部Jar、Mavenの依存関係としてすべてのHadoop Jarsを追加しようとしましたが、このerまだ存在していない。

答えて

5

JavaDoc of FlatmapFunctionによれば、java.lang.Iterable<String>が返され、java.util.Iterator<String>が返されます。 IteratorはIterableインターフェイスを実装していないため、コードは互換性がありません。幸いにも、Listインタフェースはそうあなたがしなければならないすべては、Iterableインターフェースを拡張します:

  • あなたの作成したリスト
  • の端から.iterator()コールを削除Iterable<String>するcall(String x)メソッドの戻り値の型を修正

このIteratorからIterableへの変更はおそらく最近のバージョンのSparkで発生しており、例はまだ更新されていません。

+0

これははるかに簡単です。http://stackoverflow.com/a/38881118/5581893 – johnlowvale

+1

Java 8 lambdaを使用するので簡単です。しかし、OPはJava 1.7を使用していると言いました。Java 1.7はサポートしていません。 –

関連する問題