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