IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Spark统计一座城市的男女人数,以及男女消费额的最高与最低 -> 正文阅读

[大数据]Spark统计一座城市的男女人数,以及男女消费额的最高与最低

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

?

数据生成代码如下:

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

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

代码如下:
?

		SparkConf sparkconf = new SparkConf().
				setAppName(" ").setMaster("local");
		JavaSparkContext sc = new JavaSparkContext(sparkconf);
		JavaRDD<String> lines = sc.textFile("数据路径");
		JavaRDD<Integer> rdd1 = lines.map(f->{
			return (Integer.valueOf(f.split(" ")[2]));
		}); //只取出消费额这一列,并将其转化成整数类型
	        long counts = rdd1.count(); //统计城市有多少人
	        long avg = 0;
	        int sum = 0;

	        sum = rdd1.reduce((a, b) -> a + b); //求消费额总额
	        avg = sum/counts; // 人均消费=总消费额/人数
		//输出
		System.out.println("这座城市一共有:" + counts + "人");
		System.out.println("这座城市的消费总额为:" + sum + "元");
		System.out.println("这座城市的人均消费额为:" + avg + "元");

结果如下:

?

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

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

代码如下:

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

比较大小函数:

	public static int MAX(int x,int y) {
		if (x<y) {
			return y;
		}else {
			return x;
		}
	}
	public static int MIN(int x,int y) {
		if (x<y) {
			return x;
		}else {
			return y;
		}
	}	

最终结果:

?

?

?

?

不足之处,欢迎指正。hhh

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-28 22:59:51  更:2021-12-28 23:01:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:07:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码