2016-06-20 4 views
0

Ich versuche, MAP (Mean Average Precision) zu implementieren, und bis jetzt funktioniert alles, aber ich erreichte das Stadium, in dem ich die Berechnungen auf der RDD durchführen muss. (Ohne Wiederholungen zu verwenden, ist rdd.collect() keine Option)Berechnungen auf Spark RDD ohne Verwendung von Iterationen

hier ist die letzte erzeugte RDD (tatsächlichen und vorhergesagten Bewertungen zusammen mit Index), dass auf ihm Ich möchte die Berechnungen tun:

JavaPairRDD<Tuple2<Double, Double>, Long> actualAndPredictedSorted = actual.join(predictions).mapToPair(
       new PairFunction<Tuple2<Tuple2<Integer,Integer>,Tuple2<Double,Double>>, Double, Double>() { 
        public Tuple2<Double,Double> call(Tuple2<Tuple2<Integer,Integer>,Tuple2<Double,Double>> t) { 
         return new Tuple2 < Double, Double > (t._2._2, t._2._1); 
        } 
     }).sortByKey(false).zipWithIndex(); 

Neben Unten finden Sie ein Bild, das erklärt, wie die Berechnung durchgeführt wird. zum Beispiel wird ein Eintrag berechnet bekommen (grün als Treffer angesehen wird), wenn tatsächliche Bewertung des Benutzers in den rdd oben 3/5

enter image description here

I hoffe, dass ich mich erklärt!

Antwort

0

Sie müssen filtern, nicht iterieren.

Es kann von

  1. Filterung erreicht werden (Ratings nur zu halten, die die Bedingungen erfüllen).
  2. Alle hinzufügen
  3. Teilen nach Anzahl der Einträge.
+0

ist die Addierstufe durch Reduzieren? –

+0

Ja. Map ist eine Art Funktor, Sie wenden eine Funktion auf eine RDD an und sie wird in einen neuen Wert umgewandelt. Reduzieren berechnet im Allgemeinen. –

+0

Kann immer noch nicht hinzufügen hinzufügen, können Sie bitte mehr darüber ausarbeiten? vielleicht ein Stück Code zeigen? Vielen Dank. –

Verwandte Themen