2015-03-12 9 views
5
JavaPairRDD<String, Float> counts = ones 
      .reduceByKey(new Function2<Float, Float, Float>() { 
       @Override 
       public Float call(Float i1, Float i2) { 
        return i1 + i2; 
       } 
      }); 

Meine Ausgabe ist l ist wie:Wie sortieren nach Wert in Funken Java erreichen

id,value 
100002,23.47 
100003,42.78 
200003,50.45 
190001,30.23 

ich die Ausgabe von Wert sortiert werden möchten wie:

200003,50.45 
100003,42.78 
190001,30.23 
100002,23.47 

Wie Ich erreiche das?

+0

Spark funktioniert auf Keys. Wenn Sie nach "Werten" sortieren müssen und es ein guter Schlüssel (?) Ist, ordnen Sie die RDD entsprechend zu und verwenden Sie [sortByKey] (https://spark.apache.org/docs/1.0.0/api/ java/org/apache/spark/api/java/JavaPairRDD.html #sortByKey% 28Boolean% 29). –

Antwort

3

Ich denke, es gibt keine spezielle API zum Sortieren der Daten auf Wert.

Mai werden Sie unter Schritte tun müssen:

1) tauschen Schlüssel und Wert
2) Verwenden Sie sortByKey API
3) tauschen Schlüssel und Wert

Blick auf die mehr Details über sortByKey in beloe Referenz:
https://spark.apache.org/docs/1.0.0/api/java/org/apache/spark/api/java/JavaPairRDD.html#sortByKey%28boolean%29

für Swap, können wir Scala Tuple API verwenden:

http://www.scala-lang.org/api/current/index.html#scala.Tuple2

Zum Beispiel habe ich Java Pair RDD von der unten genannten Funktion.

JavaPairRDD<String, Integer> counts = ones.reduceByKey(new Function2<Integer, Integer, Integer>() { 
      @Override 
      public Integer call(Integer i1, Integer i2) { 
      return i1 + i2; 
      } 
    }); 

Nun, Schlüssel und Wert tauschen, können Sie unter Code verwenden können:

JavaPairRDD<Integer, String> swappedPair = counts.mapToPair(new PairFunction<Tuple2<String, Integer>, Integer, String>() { 
      @Override 
      public Tuple2<Integer, String> call(Tuple2<String, Integer> item) throws Exception { 
       return item.swap(); 
      } 

     }); 

Hoffnung, das hilft. Sie müssen sich um die Datentypen kümmern.

+0

wird funken java unterstützt die scala swap-funktion? –

+0

Ja. Sie können die scala.Tuple2.swap() API in Java verwenden. – Ramana

+0

Ich habe versucht, aber ich bekomme nicht ... werden Sie bitte Code zur Verwendung von Swap –

3

Scala hat eine nette sortBy Methode. Kann das Java äquivalent finden, aber das ist die scala Umsetzung:

def sortBy[K](
     f: (T) => K, 
     ascending: Boolean = true, 
     numPartitions: Int = this.partitions.size) 
     (implicit ord: Ordering[K], ctag: ClassTag[K]): RDD[T] = 
    this.keyBy[K](f) 
     .sortByKey(ascending, numPartitions) 
     .values 

Also, im Grunde ähnlich wie oben, aber es einen Schlüssel hinzufügen, anstatt nach vorne und nach hinten zu tauschen. Ich benutze es wie folgt: .sortBy(_._2) (sortieren Sie, indem Sie das zweite Element des Tupels auswählen).

Verwandte Themen