Day 13-spark实习分组topN

Spark RDD实现分组求TopN
有以下学生成绩数据:
Andy,98
Jack,87
Bill,99
Andy,78
Jack,85
Bill,86
Andy,90
Jack,88
Bill,76
Andy,58
Jack,67
Bill,79
同一个学生有多门成绩,现需要计算每个学生分数最高的前3个成绩,期望的输出结果如下:
姓名:Andy
成绩:98
成绩:90
成绩:78
*******************
姓名:Bill
成绩:99
成绩:86
成绩:79
*******************
姓名:Jack
成绩:88
成绩:87
成绩:85
*******************

项目实现:

package com.task.hotWord

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD

/**
 * 同一个学生有多门成绩,现需要计算每个学生分数最高的前3个成绩,期望的输出结果如下:
    姓名:Andy
    成绩:98
    成绩:90
    成绩:78
 *******************
    姓名:Bill
    成绩:99
    成绩:86
    成绩:79
 *******************
    姓名:Jack
    成绩:88
    成绩:87
    成绩:85
 *******************
 */
object topN {

  def main(args: Array[String]): Unit = {
    val conf: SparkConf = new SparkConf()
      .setAppName("分组top")
      .setMaster("local[*]")

    val sc = new SparkContext(conf)

        val line: RDD[String] = sc.textFile("E:\\IdeaProject\\hadoop\\project\\src\\main\\java\\com\\task\\hotWord\\aa.txt")
//    val line: RDD[String] = sc.textFile(args(0))
    val value: RDD[(String, Int)] = line.map(l => {
      val strings: Array[String] = l.split(",")
      (strings.apply(0), strings.apply(1).toInt)
    })


    value.groupByKey()
      .mapValues(_.toSeq.sortBy(-_).take(3))
      .collect()
      .foreach(m => {
        val name: String = m._1
        println(s"姓名:$name")

        m._2.foreach(score =>
          println(s"成绩:$score")
        )
        println("*******************")
      }
      )

    sc.stop()
  }

}

提交spark集群

/opt/apps/spark-3.2.3-bin-hadoop3.2/bin/spark-submit --master spark://linux01:7077 --executor-memory 1g --total-executor-cores 4 --class com.task.hotWord.hotWordCnt /root/SX_data/project-1.0-SNAPSHOT.jar hdfs://linux01:8020/SX_project/task_3/keywords.txt hdfs://linux01:8020/SX_project/task_3/out
/opt/apps/spark-3.2.3-bin-hadoop3.2/bin/spark-submit --master yarn --executor-memory 1g --total-executor-cores 4 --class com.task.hotWord.topN /root/SX_data/project-1.0-SNAPSHOT.jar hdfs://linux01:8020/SX_project/task_4/score.txt
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值