scala - сравнить кортеж или пересечь по ключу более 1 кортежа - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть:

список (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, которые я я делаю

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...