2016-06-24 11 views
2

Ich habe RDD von Strings in Scala. Die Zeichenfolgen sind IDs. Es wäre so etwas.String RDD Join Operation

1 
2 
3 
4 

Ich habe eine andere RDD mit (ID, Name) wie folgt.

(1, Name1) 
(2, Name2) 
(3, Name3) 
(4, Name4) 
(5, Name5) 
(6, Name6) 

Jetzt möchte ich die Namen für alle IDs in der ersten RDD bekommen. Wie mache ich das?

Ich erkannte, dass, wenn die erste RDD eine pairRDD war, ich nur die beiden RDDs verbinden könnte. Also, warum haben wir nur Join-Operationen für pairRDD?

Antwort

2

Basierend auf Ihren Kommentar zu CafeFeeds beantworten Sie ein 'ausgestrahlt join' RDD klein genug ist, wenn die IDs in Erwägung ziehen könnte.

val ids: RDD[Int] = ??? 
val names: RDD[(Int, String)] = ??? 
val bcIds = sc.broadcast(ids.collect.toSet) 
val result = names.filter(x => bcIds.value.contains(x._2)) 

Der Vorteil davon ist, dass man die Namen nicht RDD mischen müssen also, wenn es deutlich größer ist Sie die Menge der Arbeit zu reduzieren, die deutlich getan werden muss. Ansonsten ist die einfache Join-Methode am besten.

3

Try this:

rdd1.map(x => (x, null)).join(rdd2).mapValues(x => x._2) 
Verwandte Themen