2016-08-01 10 views
0

Ich habe eine RDD mit Tuple wieErste erste n verschiedene Schlüssel Tupeln in Scala Spark-

folgt
(a, 1), (a, 2), (b,1) 

Wie kann ich die ersten beiden Tupeln mit verschiedene Schlüssel bekommen können. Wenn ich einen Take (2) mache, bekomme ich (a, 1) und (a, 2)

Was ich brauche ist (a, 1), (b, 1) (Schlüssel sind verschieden). Werte sind irrelevant.

+0

Das Beispiel am unteren Rand des Dieser Beitrag sollte helfen. http://StackOverflow.com/a/30960114/2308683 –

+0

@ cricket_007 distinct wird das gesamte Tupel vergleichen. Was ich vergleichen muss, ist nur der Schlüssel für das Tupel. –

Antwort

2

Folgendes habe ich zusammen in Scala geworfen.

sc.parallelize(Seq(("a", 1), ("a", 2), ("b", 1))) 
    .reduceByKey((k1,k2) => k1) 
    .collect() 

Ausgänge

Array[(String, Int)] = Array((a,1), (b,1)) 
+0

Kann vereinfacht werden - 'reduceByKey' kann auf dem ursprünglichen Tupel RDD aufgerufen werden, dann brauchen Sie die Map nicht am Anfang und Ende:' input.reduceByKey ((k1, k2) => k1) .take (2) 'ist genug –

+0

@TzachZohar Guter Punkt. –

0

Wie Sie bereits eine RDD von Pair, Ihre RDD hat zusätzliche Schlüssel-Wert-Funktionalität von org.apache.spark.rdd.PairRDDFunctions zur Verfügung gestellt. Lasst uns davon Gebrauch machen.

val pairRdd = sc.parallelize(Seq(("a", 1), ("a", 2), ("b", 1))) 
// RDD[(String, Int)] 

val groupedRdd = pairRdd.groupByKey() 
// RDD[(String, Iterable[Int])] 

val requiredRdd = groupedRdd.map((key, iter) => (key, iter.head)) 
// RDD[(String, Int)] 

Oder kurz

sc.parallelize(Seq(("a", 1), ("a", 2), ("b", 1))) 
    .groupByKey() 
    .map((key, iter) => (key, iter.head)) 
-2

Es ist einfach ..... Sie müssen nur genau wie der Balg die Funktion verwenden:

val data = sc.parallelize(Seq(("a", 1), ("a", 2), ("b", 1))) 
data.collectAsMap().foreach(println) 
+0

Wenn es eine RDD ist, kann die collectAsMap explodieren, da die Daten nicht auf einen Knoten passen. Wenn es passt, wäre es nicht notwendig, Spark –

+0

zu verwenden Ich bekomme nicht, was Sie wirklich brauchen, wenn Sie nur den eindeutigen Schlüssel erhalten und den Wert ignorieren möchten, gibt es bereits Antworten in den Kommentaren – Lyen