Как выполнить операцию на случайных парах элементов СДР? - PullRequest
1 голос
/ 12 марта 2020

Я хочу выполнить операцию со случайными парами элементов СДР, чтобы взять 1 из большего числа и добавить его к меньшему.

Например, пусть это будут наши случайные пары:
(23,-52),(3,2),(5,-2),(29,0).
После того, как мы выполним данную операцию над этими парами, мы получим RDD что-то вроде этого:
(22,2,3,-51,-1,4,28,1).

Другой пример:
(3,23,-2,5,0,2,-52,29).

Как реализовать решение для этой проблемы?


Входной СДР является следующим (3,23, -2,5,0,2, -52,29). Я должен выполнить данную операцию на случайных комбинациях это элементы RDD-s. Я должен выполнить данную операцию, например, для следующих комбинаций элементов RDD-s: (23, -52), (3,2), (5, -2), (29,0) или по этим комбинациям: (2, -52), (29, -2), (0,5), (23,3).

1 Ответ

0 голосов
/ 12 марта 2020

Вы можете выполнить свою операцию на шаге карты, а затем удалить пары с помощью flatMap.

val rdd = sc.parallelize(Seq((23,-52),(3,2),(5,-2),(29,0)))
val rdd2 = rdd.map(s =>
    s._1 > s._2 match {
      case true => (s._1 - 1, s._2 + 1)
      case false => (s._1 + 1, s._2 - 1)
    }
  ).flatMap(s => Seq(s._1, s._2))

  println(rdd2.collect().mkString(" "))

вывод: 2 3 22 4 -1 -51 28 1

...