我有以下RDD:
val a = List((3, 1.0), (2, 2.0), (4, 2.0), (1,0.0))
val rdd = sc.parallelize(a)
按照右手组件的升序排序元组元素我想:
以下代码可以做到这一点,但它是如此丑陋和低效,我想知道是否有人可以提出更好的建议。
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)
答案 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