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();
}
}
结果如下:
- 运行结果展示:
- 求参加考试学生人数
- 小于20岁的人数
- 男生人数
- 13班共有多少学生
- 语文的平均成绩是多少
- 12班的女生的平均成绩是多少
- 13班数学最高成绩是多少
- 总成绩大于150分的12班的女生有几个