1、源数据如下,取出每班成绩的前三名
class1 98
class2 90
class2 92
class1 96
class1 100
class2 89
class2 68
class1 81
class2 90
2、实现过程
package Basic
import org.apache.spark.{SparkConf, SparkContext}
/**
* Created by tg on 10/25/16.
*/
object GroupTopn {
def main(args: Array[String]): Unit = {
val conf=new SparkConf().setAppName("GroupTopn").setMaster("local")
val sc=new SparkContext(conf)
//读取HDFS中的数据
val lines=sc.textFile("hdfs://tgmaster:9000/in/classinfo")
/**
* 1、通过map算子形成映射(class,score)
* 2、通过groupByKey算子针对班级Key进行分组
* 3、通过map算子对分组之后的数据取前3名,核心代码:val top3=m._2.toArray.sortWith(_>_).take(3)
* 4、通过foreach算子遍历输出
*/
lines.map(m=>{
val info=m.split(" ")
(info(0),info(1).toInt)
}).groupByKey().map(m=>{
val className=m._1
val top3=m._2.toArray.sortWith(_>_).take(3)
(className,top3)
}).foreach(item=>{
val className=item._1
println("班级:"+className+"的前3名是:")
item._2.foreach(m=>{
println(m)
})
})
}
}
3、运行结果:
班级:class1的前3名是:
100
98
96
班级:class2的前3名是:
92
90
90