Scala选择数组/ RDD的第n个元素的第n个元素

时间:2016-02-09 22:24:22

标签: scala apache-spark

我有以下RDD:

val a = List((3, 1.0), (2, 2.0), (4, 2.0), (1,0.0))
val rdd = sc.parallelize(a)

按照右手组件的升序排序元组元素我想:

  1. 选择第二个最小结果,即(3,1.0)
  2. 选择左手元素,即3
  3. 以下代码可以做到这一点,但它是如此丑陋和低效,我想知道是否有人可以提出更好的建议。

    val b = ((rdd.takeOrdered(2).zipWithIndex.map{case (k,v) => (v,k)}).toList find {x => x._1 == 1}).map(x => x._2).map(x=> x._1)
    

3 个答案:

答案 0 :(得分:1)

简单地:

implicit val ordering = scala.math.Ordering.Tuple2[Double, Int]

rdd.map(_.swap).takeOrdered(2).max.map { case (k, v) => v }

答案 1 :(得分:1)

抱歉,我不知道spark,但Scala集合中的标准方法可能会有效吗?:

rdd.sortBy {case (k,v) => v -> k}.apply(2)

答案 2 :(得分:0)

val a = List((3, 1.0), (2, 2.0), (4, 2.0), (1,0.0))
val rdd = sc.parallelize(a)
rdd.map(_.swap).takeOrdered(2).max._2
相关问题