【问题标题】:How to perform operation on random pairs of RDD elements?如何对随机的 RDD 元素对执行操作?
【发布时间】:2020-03-11 23:17:20
【问题描述】:

我想对随机的 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)。

【问题讨论】:

  • 第一个RDD的输入是什么?
  • 第一个RDD的输入是什么意思?
  • 你的第一个 RDD 不是对。你说过“给定对”,你没有得到对。
  • 是的,我明白了。您说“在我们对这对执行给定操作之后”......对于“第一个问题”?
  • @cricket_007 很抱歉没有早点回复。我正在等待冠状病毒检测的结果。它是否定的。输入的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)。什么是随机组合不相关,相关的是对一些随机组合执行给定的操作。

标签: apache-spark rdd


【解决方案1】:

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

【讨论】:

  • 我认为使用模式匹配会使s._1s._2 看起来更干净,你可以这样做println(rdd2.collect().mkString(" "))
猜你喜欢
  • 1970-01-01
  • 2017-04-29
  • 2015-04-23
  • 2022-06-18
  • 1970-01-01
  • 2021-07-10
  • 1970-01-01
  • 2010-12-15
  • 1970-01-01
相关资源
最近更新 更多