2016-08-02 5 views
1

Ich habe versucht, die erste example ausführen.Java FlatMapFunction in Spark: Fehler: ist nicht abstrakt und überschreibt nicht abstrakte Methode Aufruf (String) in FlatMapFunction

Der Quellcode ist:

/*keyWordCount.java */ 
      import org.apache.spark.*; 
      import org.apache.spark.api.java.*; 
      import org.apache.spark.api.java.function.*; 
      import org.apache.spark.rdd.*; 
      import org.apache.spark.api.java.JavaRDD; 
      import java.util.*; 

      public class keyWordCount { 

       public static void main(String[] args) { 
        SparkConf conf = new SparkConf().setAppName("keyWordCount"); 
        JavaSparkContext sc = new JavaSparkContext(conf); 
        JavaRDD<String> textFile = sc.textFile("output"); 
        JavaRDD<String> dictFile = sc.textFile("keyword"); 
        JavaRDD<String> words = textFile.flatMap(new FlatMapFunction<String, String>() { 
         @Override public Iterable<String> call(String s) { return Arrays.asList(s.split(" ")); } 
        }); 
       } 
      } 

Wenn ich mvn Kompilierung Paket kompilieren verwenden, wird der folgende Fehler halten zeigt sich:

[ERROR] COMPILATION ERROR : [INFO] ------------------------------------------------------------- [ERROR] /home/cyberliem/TestSpark/src/main/java/keyWordCount.java:[16,81] error: is not abstract and does not override abstract method call(String) in FlatMapFunction

[ERROR] /home/cyberliem/TestSpark/src/main/java/keyWordCount.java:[17,39] error: call(String) in cannot implement call(T) in FlatMapFunction

[ERROR] T extends Object declared in interface FlatMapFunction R extends Object declared in interface FlatMapFunction /home/cyberliem/TestSpark/src/main/java/keyWordCount.java:[17,5] error: method does not override or implement a method from a supertype

Ich bin nicht sicher, wie dies zu beheben, kann jeder gib mir ein Ideal, warum es schief geht?

+0

versuchen, @Override –

Antwort

3

try this one:

JavaRDD<String> words = textFile.flatMap(new FlatMapFunction<String, String>() { 
    @Override public Iterator<String> call(String s) { return Arrays.asList(s.split(" ")).iterator(); } 
}); 

oder noch einfacher mit Lambda-Ausdrücke:

JavaRDD<String> words = textFile.flatMap(l -> Arrays.asList(l.split(" ")).iterator()); 
+0

zu entfernen Danke, ich werde versuchen und später ein Feedback geben. – TheCyberliem

0

Nur zur Klarstellung da wie ein Versionskonflikt aussieht, wenn FlatMapFunction auf meiner Ellipse mit und Kompilieren über Maven

Auf Ellipse hatte ich diese

public Iterable<String> call(String s) 

Auf der anderen Seite, bei der Verwendung von Maven kompilieren hatte ich

public Iterator<Rating> call(String s) 

Diese Qual verursacht zu verwenden, aber jetzt hat es mit letzteren entschieden.

Verwandte Themen