数据如下:
班级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人
共有学生6人
13班共有学生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