У меня 2 спаренных РД, как показано нижеРДД поиска внутри трансформации
RDD1 содержит имя в качестве ключа и почтового индекса в качестве значения:
RDD1 -> РДД ((Ashley, 20171), (йаш, 33613), (Evan, 40217))
RDD2 содержит почтовый индекс в качестве ключа и некоторое случайное число в качестве значения:
RDD2 -> РДД ((20171 , 235523), (33613, 345345345), (40189, 44355217), (40122, 2345235), (40127, 232323424))
мне нужно заменить Почтовые индексы в RDD1 с соответствующими значениями из RDD2. Таким образом, результат будет
RDD3 -> РДД ((Ashley, 235523), (Яш, 345345345), (Evan, 232323424))
Я попытался сделать это, используя метод поиска RDD как ниже, но я получил исключение о том, что преобразования RDD не может быть выполнена внутри другого преобразования RDD
val rdd3 = rdd1.map(x => (x._1, rdd2.lookup(x._2)(0)))
Вы не можете сделать это. Если 'rdd2' мал, вы можете собрать его на драйвере и транслировать его, тогда то, что вы пытаетесь, будет возможно. В противном случае вам, вероятно, придется играть с объединениями, чтобы достичь того, чего вы хотите. – vanza
Вы имеете в виду что-то вроде этого? val zipmap = Карта («40217» -> «Алабама», «40222» -> «Аляска», «20127» -> «майами», «33613» -> «Херндон», «40111» -> «тампа») val broadcastVar = sc.broadcast (zipmap) val user_zip_lookup = user_zip_pair.map (x => (x._1, broadcastVar.value (x._2))) – yAsH
Да, это его суть, если вы можете транслировать данные , – vanza