摘 要
本文将介绍利用Spark RDD实现分组并排序。
被朋友问到Spark分组并排序怎么实现?当时,本人觉得So-Easy的问题。因为在MapReduce也会有类似的需求,相较于MapReduce,那Spark的实现简直简单爆了。but,依然阴沟翻船,具体思路是没有错的,但在纸上描述代码的时候出现了错误,这其实就是归根于用IDE的代价吧。好多东西,不需要刻意的去记忆。反思... ...所以在ide上手动实现了一遍Spark RDD 分组并排序,以示警戒。
思路很简单,就是按照key分组,并且分组完成后将其每组内部进行分组排序。涉及到的算子有两个:groupByKey
& mapValues
object RDDTest {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setMaster("local").setAppName("RDDTest")
val sc = new SparkContext(conf)
val rdd1 = sc.parallelize(List(("a",1),("a",2),("a",3),("a",4),("b",5),("b",6),("b",7),("b",8)))
//根据key分组并内部降序
rdd1.groupByKey().mapValues(f=>{
//分组内部排序的两种方式
f.toList.sorted.reverse
// f.toList.sortWith(_>_)
}).foreach(println)
sc.stop()
}
}