最近面试遇到一个问题就是,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((小刚