Spark练习题--基础20题

数据如下:
班级ID 姓名 年龄 性别 科目 成绩
12 张三 25 男 chinese 50
12 张三 25 男 math 60
12 张三 25 男 english 70
12 李四 20 男 chinese 50
12 李四 20 男 math 50
12 李四 20 男 english 50
12 王芳 19 女 chinese 70
12 王芳 19 女 math 70
12 王芳 19 女 english 70
13 张大三 25 男 chinese 60
13 张大三 25 男 math 60
13 张大三 25 男 english 70
13 李大四 20 男 chinese 50
13 李大四 20 男 math 60
13 李大四 20 男 english 50
13 王小芳 19 女 chinese 70
13 王小芳 19 女 math 80
13 王小芳 19 女 english 70

package com.kgc.kb07

import org.apache.spark.SparkContext
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.SparkSession

object HomeWork {
  def main(args: Array[String]): Unit = {
    val session: SparkSession = SparkSession.builder().master("local[*]").appName("sparkSession").getOrCreate()
    val sc: SparkContext = session.sparkContext
    val a: RDD[String] = sc.textFile("D:\\A IDEA 2018.2.2\\Projects\\scala\\src\\main\\scala\\com\\kgc\\kb07\\data\\homework")
    //a.collect().foreach(println)
    val b = a.map(x => {
      val fields = x.split(" ")
      val ID = fields(0)
      val name = fields(1)
      val age = fields(2)
      val sex = fields(3)
      val course = fields(4)
      val score = fields(5)
      ( ID, name, age, sex, course, score)
    })
    //1、 一共有多少人参加考试?
    val l0 = b.map(_._2).distinct().count()
    println("参加考试学生共:"+l0)
    //2、一共有多少个小于20岁的人参加考试?
    val l1 = b.map(x=>(x._2,x._3)).distinct().filter(_._2.toInt<20).count()
    println("小于20岁的人:"+l1)
    //3、一共有多少个等于20岁的人参加考试?
    val l2 = b.map(x=>(x._2,x._3)).distinct().filter(_._2.toInt==20).count()
    println("等于20岁的人:"+l2)
    //4、一共有多少个大于20岁的人参加考试?
    val l3 = b.map(x=>(x._2,x._3)).distinct().filter(_._2.toInt>20).count()
    println("大于于20岁的人:"+l3)
    //5、一共有多个男生参加考试?
    val l4 = b.map(x=>(x._2,x._4)).distinct().filter(_._2=="男").count()
    println("共有男生"+l4+"人")
    //6、一共有多少个女生参加考试?
    val l5 = b.map(x=>(x._2,x._4)).distinct().filter(_._2=="女").count()
    println("共有男生"+l5+"人")
    //7、有多少人参加考试?
    val l6 = b.map(x=>(x._2)).distinct().count()
    println("共有学生"+l6+"人")
    //8、13班有多少人参加考试?
    val l7 = b.map(x=>(x._2,x._1)).distinct().filter(_._2.toInt==13).count()
    println("13班共有学生"+l7+"人")
    //9、语文科目的平均成绩是多少?
    val l8 = b.map(x=>(x._5,x._6)).filter(_._1.equals("chinese"))
    val l8_1 = l8.map(_._2.toInt).collect().sum
    val l8_2 = l8.map(_._2).collect().size
    val l8_3 = l8_1/l8_2
    println("语文科目的平均成绩是:"+l8_3)
    //10、数学科目的平均成绩是多少?
    val l9 = b.map(x=>(x._5,x._6)).filter(_._1.equals("math"))
    val l9_1 = l9.map(_._2.toInt).collect().sum
    val l9_2 = l9.map(_._2).collect().size
    val l9_3 = l9_1/l9_2
    println("数学科目的平均成绩是:"+l9_3)
    //11、英语科目的平均成绩是多少?
    val l10 = b.map(x=>(x._5,x._6)).filter(_._1.equals("english"))
    val l10_1 = l10.map(_._2.toInt).collect().sum
    val l10_2 = l10.map(_._2).collect().size
    val l10_3 = l10_1/l10_2
    println("英语科目的平均成绩是:"+l10_3)
    //12、单个人平均成绩是多少?
    val l11 = b.map(x=>(x._2,x._6.toInt)).groupByKey()
    l11.mapValues(x=>x.sum/x.size).collect().foreach(x=>{println("个人成绩是"+x)})
    //13、12班平均成绩是多少?
    val l12 = b.map(x=>(x._1,x._6.toInt)).filter(x=>(x._1=="12")).groupByKey().mapValues(x=>(x.sum/x.size))
    println("12班的平均成绩是:"+l12.collect().mkString(","))
    //14、12班男生平均总成绩是多少?
    val l13 = b.filter(_._1=="12").map(x=>(x._4,x._6.toInt)).filter(x=>(x._1=="男")).groupByKey().mapValues(x=>(x.sum/x.size))
    println("12班男生的平均成绩是:"+l13.collect().mkString(" "))
    //15、12班女生平均总成绩是多少?
    val l14 = b.filter(_._1=="12").map(x=>(x._4,x._6.toInt)).filter(x=>(x._1=="女")).groupByKey().mapValues(x=>(x.sum/x.size))
    println("12班女生的平均成绩是:"+l14.collect().mkString(" "))
    //16、同理求13班相关成绩?13班男生平均总成绩是多少?
    val l15 = b.filter(_._1=="13").map(x=>(x._4,x._6.toInt)).filter(x=>(x._1=="男")).groupByKey().mapValues(x=>(x.sum/x.size))
    println("13班男生的平均成绩是:"+l15.collect().mkString(" "))
    //13班女生平均总成绩是多少?
    val l16 = b.filter(_._1=="13").map(x=>(x._4,x._6.toInt)).filter(x=>(x._1=="女")).groupByKey().mapValues(x=>(x.sum/x.size))
    println("13班女生的平均成绩是:"+l16.collect().mkString(" "))
    //17、全校语文成绩最高分是多少?
    val l17 = b.filter(_._5 == "chinese").map(_._6.toInt).max()
    println("全校语文成绩最高分是:"+l17)
    //18、12班语文成绩最低分是多少?
    val l18 = b.filter(_._5=="chinese").filter(_._1=="12").map(_._6.toInt).min()
    println("12班语文成绩最低分是:"+l18)
    //19、13班数学最高成绩是多少?
    val l19 = b.filter(_._5=="math").filter(_._1=="13").map(_._6.toInt).max()
    println("13班数学成绩最高分是:"+l19)
    //20、总成绩大于150分的12班的女生有几个?
    val l20 = b.filter(_._1=="12").filter(_._4=="女").map(x=>(x._2,x._6.toInt)).groupByKey().mapValues(x=>(x.sum>150)).count()
    println("总成绩大于150分的12班的女生有:"+l20)

    sc.stop()
  }
}


参加考试学生共:6
小于20岁的人:2
等于20岁的人:2
大于于20岁的人:2
共有男生4人
共有男生2人
共有学生613班共有学生3人
语文科目的平均成绩是:58
数学科目的平均成绩是:63
英语科目的平均成绩是:63
个人成绩是(张大三,63)
个人成绩是(李大四,53)
个人成绩是(王芳,70)
个人成绩是(张三,60)
个人成绩是(王小芳,73)
个人成绩是(李四,50)
12班的平均成绩是:(12,60)
12班男生的平均成绩是:(,55)
12班女生的平均成绩是:(,70)
13班男生的平均成绩是:(,58)
13班女生的平均成绩是:(,73)
全校语文成绩最高分是:70
12班语文成绩最低分是:50
13班数学成绩最高分是:80
1

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值