I 2 gepaart RDDs haben wie unterRDD-Suche innerhalb einer Transformation
RDD1 Namen als Schlüssel und zipcode als Wert enthält:
RDD1 -> RDD ((ashley, 20171), (yash, 33613), (evan, 40217))
RDD2 enthält Postleitzahl als Schlüssel und einige Zufallszahl als Wert:
RDD2 -> RDD ((20171 , 235523), (33613, 345.345.345), (40189, 44.355.217), (40122, 2.345.235), (40127, 232323424))
Ich brauche die Zipcodes in RDD1 mit den entsprechenden Werten von RDD2 zu ersetzen. So würde der Ausgang sein
RDD3 -> RDD ((ashley, 235523), (yash, 345.345.345), (evan, 232323424))
ich es versuchte dabei die RDD-Lookup-Methode wie unten, aber ich habe Ausnahme sagen, dass RDD Transformationen können nicht innerhalb eines anderen RDD Transformation
val rdd3 = rdd1.map(x => (x._1, rdd2.lookup(x._2)(0)))
Sie nicht das tun kann. Wenn 'rdd2' klein ist, könnten Sie es auf dem Treiber sammeln und ausstrahlen, dann wäre das, was Sie versuchen, möglich. Sonst müssen Sie wahrscheinlich mit Joins spielen, um zu erreichen, was Sie wollen. – vanza
Meinst du sowas? val zipmap = Karte ("40217" -> "Alabama", "40222" -> "Alaska", "20127" -> "miami", "33613" -> "herndon", "40111" -> "tampa") val broadcastVar = sc.broadcast (zipmap) val benutzerzip_lookup = user_zip_pair.map (x => (x._1, broadcastVar.value (x._2))) – yAsH
Ja, das ist der Kern davon, wenn Sie die Daten senden können . – vanza