数据:
班级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
12 赵敏 19 女 chinese 70
12 赵敏 19 女 math 90
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
import org.apache.spark.{SparkConf, SparkContext}
object StudentTest {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setMaster("local[2]").setAppName("studentJob")
val sc = new SparkContext(conf)
val rdd = sc.textFile("file:///D:/notepad++/File/hadoop/scala/student.txt")
val rddWithoutHead = sc.parallelize(rdd.collect().drop(1)).map(x=>x.split(" ")).cache()
//班级ID 姓名 年龄 性别 科目 成绩
//12 张三 25 男 chinese 50
//一共有多少人参加考试?
println(rddWithoutHead.groupBy(x=>x(1)).collect().size)
//一共有多少个小于 20 岁的人参加考试?
println(rddWithoutHead.filter(x=>(x(2).toInt<20)).groupBy(x=>x(1)).collect().size)
//一共有多少个等于 20 岁的人参加考试?
println(rddWithoutHead.filter(x=>(x(2).toInt==20)).groupBy(x=>x(1)).collect().size)
//一共有多少个大于 20 岁的人参加考试?
println(rddWithoutHead.filter(x=>(x(2).toInt>20)).groupBy(x=>x(1)).collect().size)
//一共有多个男生参加考试?
println(rddWithoutHead.filter(x=>x(3).equals("男")).groupBy(x=>x(1)).collect().size)
//一共有多少个女生参加考试?
println(rddWithoutHead.filter(x=>x(3).equals("女")).groupBy(x=>x(1)).collect().size)
//12 班有多少人参加考试?
println(rddWithoutHead.filter(x=>x(0).equals("12")).groupBy(x=>x(1)).collect().size)
//13 班有多少人参加考试?
println(rddWithoutHead.filter(x=>x(0).equals("13")).groupBy(x=>x(1)).collect().size)
//语文科目的平均成绩是多少?
val a = rddWithoutHead.filter(x=>x(4).equals("chinese")).map(x=>x(5).toInt).collect()
// println(a.sum/a.size)
//数学科目的平均成绩是多少?
val b = rddWithoutHead.filter(x=>x(4).equals("math")).map(x=>x(5).toInt).collect()
// println(b.sum/b.size)
//英语科目的平均成绩是多少?
val c = rddWithoutHead.filter(x=>x(4).equals("english")).map(x=>x(5).toInt).collect()
// println(c.sum/c.size)
//单个人平均成绩是多少?
rddWithoutHead.map(x=>(x(1),x(5).toInt)).groupBy(x=>x._1).map(x=>(x._1,x._2.map(x=>x._2).sum/x._2.size)).foreach(println)
//12,13 班平均成绩是多少?
rddWithoutHead.map(x=>(x(0),x(5).toInt)).groupBy(x=>x._1).map(x=>(x._1,x._2.map(x=>x._2).sum/x._2.size)).foreach(println)
//12 班男生平均总成绩是多少?
val sum1 = rddWithoutHead.filter(x=>x(0).equals("12")&&x(3).equals("男")).map(x=>(x(1),x(5).toInt)).collect()
println(sum1.map(x=>x._2).sum/sum1.groupBy(x=>x._1).size)
//12 班女生平均总成绩是多少?
val sum2 = rddWithoutHead.filter(x=>x(0).equals("12")&&x(3).equals("女")).map(x=>(x(1),x(5).toInt)).collect()
println(sum2.map(x=>x._2).sum/sum2.groupBy(x=>x._1).size)
//全校语文成绩最高分是多少?
println(rddWithoutHead.filter(x=>x(4).equals("chinese")).map(_(5)).max())
//12 班语文成绩最低分是多少?
println(rddWithoutHead.filter(x=>x(0).equals("12")&&x(4).equals("chinese")).map(_(5)).max())
//13 班数学最高成绩是多少?
println(rddWithoutHead.filter(x=>x(0).equals("13")&&x(4).equals("math")).map(_(5)).min())
//总成绩大于 150 分的 12 班的女生有几个?
println(rddWithoutHead.filter(x=>x(0).equals("12")&&x(3).equals("女")).map(x=>(x(1),x(5).toInt)).groupBy(_._1).map(_._2.map(_._2).sum).filter(_>150).collect().size)
}
}