二次排序概念:
首先按照第一字段排序,然后再对第一字段相同的行按照第二字段排序,注意不能破坏第一次排序的结果 。
废话不多说,直接上代码:
val rdd = sc.makeRDD( Array(
(20, 21), ( 50, 51), ( 50 ,52), ( 50, 53), (50, 54), (60, 51),
(60, 53), ( 60, 52), (60, 56), (60, 57), (70 ,58), (60, 61),
(70, 54), (70, 55), (70, 56), (70, 57), (70, 58)
))
val result = rdd.sortByKey( true ).aggregateByKey(ArrayBuffer[Int]())( _:+_,_++_ ).mapValues( x => x.sortBy( -_ ))
用scala开发spark的代码就是这么简洁。嘿嘿