当前位置:   article > 正文

Spark统计一座城市的男女人数,以及男女消费额的最高与最低_spark统计男生人数

spark统计男生人数

题目中没有给出数据,我的数据是自己使用随机数代码生成的:

 

数据生成代码如下:

  1. Random r = new Random();
  2. FileWriter fw = new FileWriter("生成文件的路径以及名称");
  3. int x = r.nextInt(1100000)-100000;
  4. for(int y = 1;y <= x;y++) {
  5. int sex1 = r.nextInt(10);
  6. int cost = r.nextInt(10000);
  7. String sex;
  8. if (sex1%2 == 1) //性别使用随机生成的数是奇数或是偶数来判断
  9. sex = "M";
  10. else
  11. sex = "F";
  12. fw.write(y + " " + sex + " " + cost + "\r\n" );
  13. fw.flush();
  14. }
  15. fw.close();

数据已经有了,接下来就可以统计这座城市一共有多少人,消费总额,人均消费了。

代码如下:
 

  1. SparkConf sparkconf = new SparkConf().
  2. setAppName(" ").setMaster("local");
  3. JavaSparkContext sc = new JavaSparkContext(sparkconf);
  4. JavaRDD<String> lines = sc.textFile("数据路径");
  5. JavaRDD<Integer> rdd1 = lines.map(f->{
  6. return (Integer.valueOf(f.split(" ")[2]));
  7. }); //只取出消费额这一列,并将其转化成整数类型
  8. long counts = rdd1.count(); //统计城市有多少人
  9. long avg = 0;
  10. int sum = 0;
  11. sum = rdd1.reduce((a, b) -> a + b); //求消费额总额
  12. avg = sum/counts; // 人均消费=总消费额/人数
  13. //输出
  14. System.out.println("这座城市一共有:" + counts + "人");
  15. System.out.println("这座城市的消费总额为:" + sum + "元");
  16. System.out.println("这座城市的人均消费额为:" + avg + "元");

结果如下:

 

接下来分别对男性和女性求人数,及最高消费额。我们可以根据性别得到两个RDD,然后可以排序,求首尾的数据即可,也可以直接比大小得到。

我是通过比较大小得出的最高最低消费,没有使用排序的方式。

代码如下:

  1. SparkConf sparkconf = new SparkConf().
  2. setAppName(" ").setMaster("local");
  3. JavaSparkContext sc = new JavaSparkContext(sparkconf);
  4. JavaRDD<String> lines = sc.textFile("数据路径");
  5. JavaPairRDD<String, Integer> rdd1 =
  6. lines.mapToPair(f->new Tuple2<>(f.split(" ")[1],Integer.valueOf(f.split(" ")[2])));
  7. JavaPairRDD<String, Integer>rddM1 = rdd1.filter(f->{
  8. return (f._1().contains("M"));
  9. }); //只保留含有M的数据
  10. JavaPairRDD<String, Integer>rddF1 = rdd1.filter(f->{
  11. return (f._1().contains("F"));
  12. }); //只保留含有F的数据
  13. JavaPairRDD<String, Integer> MAXM = rddM1.reduceByKey((x,y)->MAX(x,y)); //消费额比较大小保留大的,下面同理
  14. JavaPairRDD<String, Integer> MAXF = rddF1.reduceByKey((x,y)->MAX(x,y));
  15. JavaPairRDD<String, Integer> MINM = rddM1.reduceByKey((x,y)->MIN(x,y));
  16. JavaPairRDD<String, Integer> MINF = rddF1.reduceByKey((x,y)->MIN(x,y));
  17. MINF.foreach(x -> System.out.println("女性最低消费"+x._2));
  18. MINM.foreach(x -> System.out.println("男性最低消费"+x._2));
  19. MAXF.foreach(x -> System.out.println("女性最高消费"+x._2));
  20. MAXM.foreach(x -> System.out.println("男性最高消费"+x._2));
  21. long countsM = rddM1.count(); //统计人数
  22. long countsF = rddF1.count();
  23. System.out.println("男性人数为:"+countsM + "\n" + "女性人数为:" + countsF);

比较大小函数:

  1. public static int MAX(int x,int y) {
  2. if (x<y) {
  3. return y;
  4. }else {
  5. return x;
  6. }
  7. }
  8. public static int MIN(int x,int y) {
  9. if (x<y) {
  10. return x;
  11. }else {
  12. return y;
  13. }
  14. }

最终结果:

 

 

 

 

不足之处,欢迎指正。hhh

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/745196
推荐阅读
相关标签
  

闽ICP备14008679号