У меня есть:
список (Int, Int) - вызовите A как список ((Int, Int), (значение, значение)) - вызовите этот B, и я хочу заменить ( Int Int) с (значением, значением), если (Int, Int) в A совпадает с (Int, Int) в B.
Есть ли эффективный способ сделать это?
EDIT
В настоящее время я использую Spark RDD join для этого;
val A = List((1,2),(2,3),(3,4))
val B = List(((1,2),("a","b")),((2,3),("c","d")))
val A_rdd = sc.parallelize(A).map(a=>(a,None))
val B_rdd = sc.parallelize(B)
Intersect = A_rdd.join(B_rdd).map(ans=>(ans._1,ans._2._2))
РЕДАКТИРОВАТЬ 2
Таким образом, полная проблема в том, что у меня есть массивный список различных ключей, которые представляют разные состояния в парных цифрах c INT кодов. Список выглядит примерно так:
Список ((Int, Int), (Int, Int), (Int, Int) ...) каждая строка данных представляет сеанс, который имеет серию парных чисел c Int коды.
У меня есть таблица поиска ключей в виде:
Список (((Int, Int), (Value, Value)), ((Int, Int ), (Значение, Значение)) ....)
, который представляет перевод числовых пар c INT. Я хочу перевести каждую пару (Int, Int) в каждую строку данных, чтобы результат выглядел примерно так:
List ((Value, Value), (Value, Value), (Value, Value), (Значение, Значение) ...)
В настоящее время этот процесс запущен в Spark - и это утомительно, потому что мне нужно выполнить операцию соединения RDD для каждой пары INT, а затем сопоставить результат с правильным формат. Таким образом, 10 пар INT будут переводиться в 10 RDD-соединений между очень большим набором данных и меньшим набором перевода.
Я ищу эффективный способ сделать перевод простым процессом Map. Я думаю, что я могу сделать, это сжать пару INT в одну строку и сделать пересечение карты.
РЕДАКТИРОВАТЬ 3 -
Так что я сделал довольно дурацкое решение здесь, но он работает быстрее, чем текущий метод ...
def mergeMap (a:(Int,Int)) = {
val mapa = Map((a,None))
val merge = mapa.keySet.intersect(translation.keySet).map(k => k->(translation(k))).toMap
merge
}
, поэтому я применяю эту функцию к каждой паре (INT, INT), и пока она примерно в 30 раз быстрее, чем все соединения RDD, которые я я делаю