0


SparkCore对学生成绩的统计案例

SparkCore对学生成绩的统计案例

1需求分析:

根据数据文件对数据进行分析,完成如下功能:

(1)查询学生成绩表中的前5名;

(2)输出单科成绩为100分的学生ID;

(3)输出每位学生所有科目的总成绩。

2数据源(bigdata.txt,math.txt,student.txt)

#bigdata.txt1001    大数据基础    901002    大数据基础    941003    大数据基础    1001004    大数据基础    991005    大数据基础    901006    大数据基础    941007    大数据基础    1001008    大数据基础    931009    大数据基础    891010    大数据基础    781011    大数据基础    911012    大数据基础    84
#math.txt1001    应用数学    961002    应用数学    941003    应用数学    1001004    应用数学    1001005    应用数学    941006    应用数学    801007    应用数学    901008    应用数学    941009    应用数学    841010    应用数学    861011    应用数学    791012    应用数学    91
#student.txt1001    李正明
1002    王一磊
1003    陈志华
1004    张永丽
1005    赵信
1006    古明远
1007    刘浩明
1008    沈彬
1009    李子琪
1010    王嘉栋
1011    柳梦文
1012    钱多多

3代码实现

(1)查询学生成绩表中的前5名;这里指的是单科成绩哈,所以就没有合并math和data,分开求的各自排名

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

//我们的目的是取出学生成绩表中的前五名
object Top5_student_grade {
  def main(args: Array[String]): Unit ={
    val sparkConf = new SparkConf().setMaster("local").setAppName("grade")
    val sc = new SparkContext(sparkConf)
    //textFile中传入数据源,可以是相对路径或者绝对路径
    val bigdata: RDD[String]= sc.textFile("spark_core\\src\\main\\java\\data\\result_bigdata.txt")
    //获取每个数据值
    val bigdataMap: RDD[(String, String, String)]= bigdata.map(
      x =>{
        var line = x.split("\t")(line(0), line(1), line(2))})
    bigdataMap.sortBy(x=>x._3).take(5).foreach(println)

    sc.stop()}}

结果为:
在这里插入图片描述

(2)输出单科成绩为100分的学生ID;

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
//输出单科成绩为100分的学生ID;目的是输出学生ID,分数100
object grade_100_studentId {
  def main(args: Array[String]): Unit ={
    val sparkConf = new SparkConf().setMaster("local").setAppName("grade_100")
    val sc = new SparkContext(sparkConf)
    //读取大数据成绩表
    val bigdata: RDD[String]= sc.textFile("spark_core\\src\\main\\java\\data\\result_bigdata.txt")
    //获取每个数据值
    val bigdataMap: RDD[(String, String, Int)]= bigdata.map(
      x =>{
        var line = x.split("\t")(line(0), line(1), line(2).toInt)})
    //读取数学成绩表
    val math: RDD[String]= sc.textFile("spark_core\\src\\main\\java\\data\\result_math.txt")
    //获取每个数据值
    val mathMap: RDD[(String, String, Int)]= math.map(
      x =>{
        var line = x.split("\t")(line(0), line(1), line(2).toInt)})
    //分别过滤出成绩为100分的学生
    val bigdataFilter = bigdataMap.filter(x => x._3 ==100).map(_._1)
    //打印一下大数据成绩为100的学生ID
    bigdataFilter.collect().foreach(println)
    //打印一下数学成绩为100的学生ID
    val mathFilter = mathMap.filter(x => x._3 ==100).map(_._1)
    mathFilter.collect().foreach(println)
    //取出单科成绩为100的学生ID,只需要成绩100的都拿出来,取出重复的(因为有人太厉害了,数学和大数据都是100分)
    val res: RDD[String]= bigdataFilter.union(mathFilter).distinct()
    res.collect().foreach(println)}}

结果为:
在这里插入图片描述

(3)输出每位学生所有科目的总成绩。输出学生ID和总成绩

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

object student_totalGrade {
  def main(args: Array[String]): Unit ={
    val sparkConf = new SparkConf().setMaster("local").setAppName("grade_100")
    val sc = new SparkContext(sparkConf)
    //读取大数据成绩表
    val bigdata: RDD[String]= sc.textFile("spark_core\\src\\main\\java\\data\\result_bigdata.txt")
    //获取每个数据值
    val bigdataMap: RDD[(String, Int)]= bigdata.map(
      x =>{
        var line = x.split("\t")(line(0), line(2).toInt)})
    //读取数学成绩表
    val math: RDD[String]= sc.textFile("spark_core\\src\\main\\java\\data\\result_math.txt")
    //获取每个数据值
    val mathMap: RDD[(String, Int)]= math.map(
      x =>{
        var line = x.split("\t")(line(0), line(2).toInt)})
    //reduceByKey相同key,即找到相同“student_ID”,去把他们对应的成绩相加,reduce你就把它当成sum求多个数值的和即可
    val res: RDD[(String, Int)]= bigdataMap.union(mathMap).reduceByKey(_ + _)
    res.collect().foreach(println)}}

结果为:

在这里插入图片描述

解题方法很多种,✌可参考此博主的分析:https://blog.csdn.net/xiexianyou666/article/details/105766726

👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍❤❤❤👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍❤❤❤👍👍👍👍👍👍👍👍👍👍👍👍👍👍

标签: spark

本文转载自: https://blog.csdn.net/bbrry/article/details/127645552
版权归原作者 -berry 所有, 如有侵权,请联系我们删除。

“SparkCore对学生成绩的统计案例”的评论:

还没有评论