spark数据如下:
班级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
(1)求参加考试学生人数。
(2)小于20岁的人数。
(3)男生人数。
(4)13班共有多少学生
(5)语文的平均成绩是多少
(6)12班的女生的平均成绩是多少
(7)13班数学最高成绩是多少
(8)总成绩大于150分的12班的女生有几个
package homeworkRDD; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaPairRDD; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import scala.Tuple2; public class countstudent { public static void main(String[] args) { // TODO Auto-generated method stub SparkConf sparkConf = new SparkConf().setAppName("PeopleInfoCalculator").setMaster("local"); JavaSparkContext sc = new JavaSparkContext(sparkConf); JavaRDD<String> dataFile = sc.textFile ("file:///home/gyq/下载/spark-2.3.2-bin-hadoop2.7/data/countdata.txt"); JavaRDD<String> data=dataFile.filter(f->!f.contains("成绩")); JavaRDD<String> jj=data.map(f->f.split(" ")[1]).distinct(); long a=jj.count();//1 System.out.println("参加考试的人数有: "+a); JavaRDD<String> rdd1=data.map(f->f.split(" ")[1]+" "+f.split(" ")[2]); JavaRDD<String> rdd2=rdd1.filter(f->Integer.valueOf(f.split(" ")[1])<20); long b=rdd2.distinct().count();//2 System.out.println("小于20岁的人数有: "+b); JavaRDD<String> jj1=data.map(f->f.split(" ")[1]+" "+f.split(" ")[3]); JavaRDD<String> rdd3=jj1.filter(f->f.contains("男")).distinct(); long c=rdd3.count();//3 System.out.println("男生的人数有: "+c); JavaRDD<String> jj2=data.map(f->f.split(" ")[0]+" "+f.split(" ")[1]); JavaRDD<String> rdd4=jj2.filter(f->f.contains("13")); long d=rdd4.distinct().count();//4 System.out.println("13班的人数有: "+d); JavaRDD<String> rdd5=data.filter(f->f.contains("chinese")); JavaRDD<Integer> rdd6=rdd5.map(f->Integer.valueOf(f.split(" ")[5])); long ff=rdd6.count(); double g=rdd6.reduce((x,y)->x+y); double scorechinese=g/ff; System.out.println("语文平均成绩是:"+scorechinese);//5 JavaRDD<String> rdd7=data.filter(f->f.contains("12")&&f.contains("女")); JavaRDD<Integer> rdd8=rdd7.map(f->Integer.valueOf(f.split(" ")[5])); long ff1=rdd8.count();// double g1=rdd8.reduce((x,y)->x+y); double score12women=g1/ff1; System.out.println("12班女生平均成绩"+score12women);//6 JavaRDD<String> rdd9=data.filter(f->f.contains("13")&&f.contains("math")); JavaRDD<Integer> rdd10=rdd9.map(f->Integer.valueOf(f.split(" ")[5])); JavaRDD<Integer> rdd11=rdd10.sortBy(f->{return f;},false,1); double gg=rdd11.first(); System.out.println("13班数学成绩最高是"+gg);//7 JavaRDD<String> rdd12=data.filter(f->f.contains("12")&&f.contains("女")); JavaRDD<Integer> rdd13=rdd12.map(f->Integer.valueOf(f.split(" ")[5])); JavaPairRDD<String,Integer> rdd14=rdd12.mapToPair(f->{ return new Tuple2<String,Integer> (f.split(" ")[1],Integer.valueOf(f.split(" ")[5])); }); JavaPairRDD<String,Integer> rdd15=rdd14.reduceByKey((x,y)->x+y); JavaPairRDD<String,Integer> rdd16=rdd15.filter(f->f._2>150); long count=rdd16.count(); System.out.println("总成绩>150有"+count+"人");//8 sc.stop(); } }
结果如下:
1.运行结果展示:
1.求参加考试学生人数
2.小于20岁的人数
3.男生人数
4.13班共有多少学生
5.语文的平均成绩是多少
6.12班的女生的平均成绩是多少
7.13班数学最高成绩是多少
8.总成绩大于150分的12班的女生有几个