我想订购例如2d数组或RDD,如下:
val a = Array((1,1),(1,2),(1,3),(2,1),(2,2),(2,3))
要在d1上获得升序排序,在d2上获得降序排序:
val b = Array((1,3),(1,2),(1,1),(2,3),(2,2),(2,1))
不幸的是,当我在订购中应用反向时,它适用于所有维度
a.sortBy( x=> (x._1,x._2) )(Ordering[(Int,Int)].reverse.on(x=> (x._1,x._2)))
Array((2,3), (2,2), (2,1), (1,3), (1,2), (1,1))
所以我希望能够对多维度选择进行排序,我需要进行反向排序。
答案 0 :(得分:0)
这篇文章包含了answear Scala idiom for ordering by multiple criteria
val ord1 = Ordering.by{ x:Int => x }
val ord2 = Ordering.by{ x:Int => x }.reverse
val multOrd = Ordering.by{ x:(Int,Int) => x }(Ordering.Tuple2(ord1,ord2))
a.sortBy( identity )(multOrd)
Array((1,3),(1,2),(1,1),(2,3),(2,2),(2,1))
希望它可以提供帮助