如何对随机的RDD元素对执行操作?

时间:2020-03-11 23:17:20

标签: apache-spark rdd

我想对随机的RDD元素对执行操作,以便从较大的数中取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)

如何解决此问题?


输入RDD是这个(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 :(得分:0)

您可以在地图步骤中执行操作,然后使用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