Spark中實現分組取TOP N (Scala版本)__spark

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.