2016-10-18 6 views
2

Ich habe begonnen, meine Pyspark-Anwendung in Java-Implementierung zu schreiben. Ich benutze Java 8. Ich habe gerade begonnen, einige der grundlegenden Funke-Programme in Java auszuführen. Ich habe das folgende wordcount Beispiel verwendet.spark Typenkonflikt: kann nicht von JavaRDD konvertieren <Object> zu JavaRDD <String>

SparkConf conf = new SparkConf().setMaster("local").setAppName("Work Count App"); 

// Create a Java version of the Spark Context from the configuration 
JavaSparkContext sc = new JavaSparkContext(conf); 

JavaRDD<String> lines = sc.textFile(filename); 

JavaPairRDD<String, Integer> counts = lines.flatMap(line -> Arrays.asList(line.split(" "))) 
        .mapToPair(word -> new Tuple2(word, 1)) 
        .reduceByKey((x, y) -> (Integer) x + (Integer) y) 
        .sortByKey(); 

Ich erhalte Type mismatch: cannot convert from JavaRDD<Object> to JavaRDD<String> Fehler in lines.flatMap(line -> Arrays.asList(line.split(" "))) Wenn ich gegoogelt, in dem alle Java 8 basierend Funken Beispiel sah ich die gleiche oben implementation.What in meinem environemnt oder das Programm falsch gelaufen ist.

Kann mir jemand helfen?

+0

Ist 'sc' eine' JavaSparkContext' Instanz. – Ravikumar

+0

@Ravikumar, Ja, es ist JavaSparkContext. – Backtrack

Antwort

4

Verwenden Sie diesen Code. Tatsächliches Problem ist, dass die Funktion rdd.flatMap Iterator<String> erwartet, während Ihr Code List<String> erstellt. Durch Aufrufen des Iterators() wird das Problem behoben.

JavaPairRDD<String, Integer> counts = lines.flatMap(line -> Arrays.asList(line.split(" ")).iterator()) 
      .mapToPair(word -> new Tuple2<String, Integer>(word, 1)) 
      .reduceByKey((x, y) -> x + y) 
      .sortByKey(); 

counts.foreach(data -> { 
     System.out.println(data._1()+"-"+data._2()); 
    }); 
+0

Können Sie bitte eine Zeile der Erklärung hinzufügen – Backtrack

+1

@Backtrack Ich habe das Detail hinzugefügt. – abaghel

0

versuchen diesen Code

JavaRDD<String> words = 
    lines.flatMap(line -> Arrays.asList(line.split(" "))); 
JavaPairRDD<String, Integer> counts = 
    words.mapToPair(w -> new Tuple2<String, Integer>(w, 1)) 
     .reduceByKey((x, y) -> x + y); 
+0

Nein, Immer noch der gleiche Fehler – Backtrack

0
JavaRDD<String> obj = jsc.textFile("<Text File Path>"); 
JavaRDD<String> obj1 = obj.flatMap(l->{ 
ArrayList<String> al = new ArrayList(); 
String[] str = l.split(" "); 
for(int i=0;i<str/length;i++) { 
    al.add(str[i]); 
} 
return al.iterator(); 
}); 
+1

Es wäre toll, wenn Sie in Ihrer Antwort einen hilfreichen Kommentar schreiben könnten. – ajc

Verwandte Themen