分组取Top N在日常需求中很多见:
- 每个班级分数前三名同学的名字以及分数
- 各省指标数量前三的市的名字
等等需求,主要思想就是在某一个分区(班级,省)中取出该分区Top N的数据
测试数据格式:
如上图,字段含义为,班级,学生姓名,分数
下面我们通过一个Demo来实现各班级分数前三的学生姓名以及分数
1、通过Spark core 实现:
//读取测试数据保存为rdd
val rddtext = sc.textFile("file:///C:/Users/chunyuhe/Desktop/test1.txt")
//将数据转化为Row形式(为下面Spark SQL 生成临时表用)
val rowrdd = rddtext.map(m => Row(m.split(" ")(0), m.split(" ")(1), m.split(" ")(2).toInt))
/**
* spark core 实现分组取topN
*/
val classrdd = rddtext.map(x => {