Scala / Spark在多个维度上进行排序,在特定维度上进行反向排序

时间:2017-04-08 08:52:14

标签: scala apache-spark

我想订购例如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))

所以我希望能够对多维度选择进行排序,我需要进行反向排序。

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))

希望它可以提供帮助