2015-04-23 76 views
0

我有对的数组:排序Scala中,首先由值,然后通过键

Array(("hello",200.00),("name",100.00),("a",200.00),("say",150.67)) 

我希望它分类为:在第一按值降序

Array(("a",200.00),("hello",200.00),("say",150.67),("name",100.00)) 

排序,然后按升序关键

+1

那你试试这么远吗? – Mysterion

+0

我正在制作一个火花簇。所以我用sortBy命令,但这种排序只有关键或值 – Matt

+0

那么......那么为什么你使用阵列。如果您希望Spark使用RDD的任何好处。向我们展示代码,然后可能是我们可以提供帮助。 –

回答

2

这么简单

array sortBy {case (k,v) => (-v,k)} 
0

尝试使用sortWith:

val a = Array(("hello",200.00),("name",100.00),("a",200.00),("say",150.67)) 
val sorted = a.sortWith((a, b) => a._2 > b._2 || (a._2 == b._2 && a._1 < b._1)) 
0

您可以按价值 - >排序它 - >映射每个分组,以通过键SEQ排序 - >反向所有SEQ

val groupdByValue = a.groupBy { case (k, v) => v }.toSeq 
val groupsSortedByValue = groupdByValue.sortBy { case (value, group) => value } 
val sortedByValueThenKey = groupsSortedByValue.flatMap { case (k, v) => v.sortBy { case (k, v) => v } }.reverse 

sortedByValueThenKey:序号[(字符串,双)] = ArrayBuffer((A, 200.0),(你好,200.0),(比如,150.67),(姓名,100.0))

相关问题