淘先锋技术网

首页 1 2 3 4 5 6 7

数据:

班级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)
  }
}