2016-04-11 10 views
1

Ich bin neu in Spark und unten Problem, das mich für eine Weile belästigt., wie die Ausgabe von groupByKey RDD, die Schlüssel und Liste von Werten ist RDD [K, Liste [v]]

Meine Eingabedatei ist kommagetrennte Datei und RDD erstellt, die Store als Schlüssel und Liste der Aktionen als Wert hat. Ein Schlüssel (mein Fallprodukt) kann mehr als einen Wert haben. Ich habe die RDD mit GroupByKey gruppiert. Es löst mein Problem, alle Promotionen, die darunter kommen, unter den gleichen Schlüssel zu bringen. Bis dahin alles in Ordnung. Jetzt möchte ich die Werteliste für jeden Schlüssel durchlaufen, um herauszufinden, ob mein Schlüssel (Geschäft) eine besondere Förderung hat oder nicht. Wenn meine Schlüssel, dass die Förderung dann schreiben Sie den Datensatz mit Speicher (key) und Promotion (Wert) finden

val firstRDD = sc.textFile(".....") 
val secondRDD = firstRDD.map(line=>line.split(",")(0),line.split(",")(1)) 
val thirdRDD = secondRDD.groupByKey() 

(1,(aaa,bbb,ccc,ddd)) 
(2,(aaa,ccc)) 
(3,(ddd,aaa)) 

basierend auf obiger Liste I für Schlüssel 1 Wert aaa wissen wollte, ist existieren oder nicht, wenn nicht aaa ob bbb existieren oder nicht .. Wie man das in Spark Scala macht.

+0

Denken Sie darüber nach, wie eine grundlegende Scala-Operation vor der Verwendung von Karte. Wenn Sie ein Tupel haben, wie würden Sie es verarbeiten, um zu bekommen, was Sie wollen? – eliasah

Antwort

0

Da Ihre RDD vom Typ Tuple2 ist, können Sie die PairRDD-Funktionalität verwenden. Dies bedeutet, dass Sie Zugriff auf die "Lookup" -Funktion Ihrer RDDs haben. Um zu sehen, ob 1 einen entsprechenden Wert von aaa hat, wäre der einfachste Weg, wahrscheinlich

secondRDD.lookup(1).contains("aaa") 

Hinweis sein, dass es einfacher ist, secondRDD zu verwenden, wie dies thirdRDD gegenüber.

+0

danke für deine Hilfe ... in meinem Beispiel wird meine secondRDD-Taste nicht alle Werte enthalten. erst nach dem groupByKey() erhalte ich eine Werteliste für diesen Schlüssel. – Rahul

+0

val purchaseRDD \t = sc.textFile ("sales.txt") val purchaseRDDMap = purchaseRDD.map {Kauf => val Felder = purchase.split ("") \t \t \t \t \t \t val purchaseKey = Felder (0) \t \t \t \t \t \t val purchaseValue = Felder (2) .toDouble \t \t \t \t \t (purchaseKey, purchaseValue) \t \t \t \t} \t \t \t \t .groupByKey() \t \t \t \t .map (Kauf => (purchase._1, (purchase._2 *** danach i up stecken geblieben – Rahul

Verwandte Themen