Spark实现对年级、班级、学生、分数求TopN

最近面试遇到一个问题就是,Spark实现对统计 “年级, 班级, 学生, 分数” 的Top3;

除了此外问题还有:

  • 每个班级分数前三名同学的名字以及分数;

  • 各省指标数量前三的市的名字;

测试数据:

一年级、一班、yy、99

一年级、二班、xx、98

二年级、二班、yx、97

我们假如使用:

表的字段为:班级、姓名、分数

  • Spark-Core
object Test {

  def main(args: Array[String]): Unit = {
    // 加载数据
    val textRDD = sc.textFile("File://xxxxx/test.text")
    // 将数据转化为Row形式
    val rowRDD = textRDD.map(m => Row(m.split(" ")(0), m.split(" ")(1), m.split(" ")(2.toInt)))
    // 实现分区获取TopN部分
    val classRDD = textRDD.map(line => {
        // 分别获取班级、姓名、成绩
        val className = line.split(" ")(0)
        val name = line.split(" ")(1)
        val grade = line.split(" ")(2)
        // 生成便于group的元组
        (className, (name, grade.toInt))
    }).groupByKey
    classRDD.foreach(i => println(i))
    /*
    此处代码聚合完之后是
    (二班、CompactBuffer((小刚

猜你喜欢

转载自blog.csdn.net/u012965373/article/details/105097554
今日推荐