mapreduce分组统计_hadoop MapReduce编写一个分组统计并排序查询-分组

本文介绍了如何使用Hadoop MapReduce处理销售统计表数据,实现按销售员分组并按销售额降序排序的功能。通过创建一个名为GroupCount的类,包含Map和Reduce阶段,Map阶段筛选5月份数据并按销售员分组,Reduce阶段进行销售额统计并输出。最终在本地运行MapReduce作业,展示分组统计结果。
摘要由CSDN通过智能技术生成

说一下需求,有一张销售统计表,记录每个销售员每天的销售情况,现在要统计出某一月的每个销售员的销售情况并且按照销售额从高往低排序(hadoop默认是升序)。

首先在mysql里创建一张表

CREATE TABLE `t_product_sales` (

`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',

`area` varchar(255) DEFAULT NULL COMMENT '地区',

`salesman` varchar(255) DEFAULT NULL COMMENT '销售员姓名',

`sales_money` decimal(10,0) DEFAULT NULL COMMENT '销售额',

`sale_time` varchar(255) DEFAULT NULL COMMENT '销售日期(年-月-日)',

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=11717 DEFAULT CHARSET=utf8 COMMENT='销售统计表';

然后使用excl造数据,为了节约时间,这里制造了5月份的所有数据表数据

下面是在mysql里需求的sql语句

SELECT salesman,sum(sales_money) totalmoney

FROM `t_product_sales`

WHERE sale_time like '2015-05%'

GROUP BY salesman

ORDER BY totalmoney DESC;

将数据从mysql中导出,并且导出成文本,文本数据,将导出的文本上传到hdfs中,放在根据经下的groupcount-in文件夹下。

我们先来分析下数据,在文本里每一行代表一个记录,在一行中以制表符区分字段。我们首先要取出所有五月份的数据,然后再对每一天的数据进行操作,取出每个人的销售额,最后排序。那么具体到程序上,map的任务就是取出五月份的的数据,reduce就是进行统计。好了,下面开始编写。

在Eclipse创建项目,编写一个GroupCount类,下面是类代码:

GroupCount.java此类将数据提取出来,然后按销售员分组输出

package gruopcount;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.Path;

import org.apache.hadoop.io.DoubleWritable;

import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.io.LongWritable;

import org.apache.hadoop.io.Text;

import org.apache.hadoop.io.WritableComparable;

import org.apach

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设我们有一个天气数据集,每个记录包含日期、城市、最高温度和最低温度。我们想要统计每个城市在每个月的平均最高温度和平均最低温度,我们可以使用MapReduce进行分组统计。 首先,我们需要定义Mapper函数的输入和输出。Mapper函数的输入应该是文本行,每行表示一个天气记录,包含日期、城市、最高温度和最低温度,以逗号分隔。Mapper函数的输出应该是键值对,其中键是由城市和月份组成的复合键,值是一个包含最高温度和最低温度的可序列化对象。 伪代码如下: ```python Mapper(输入: key, value): 解析输入行,获取城市、日期、最高温度和最低温度 从日期中提取出月份 构造复合键,由城市和月份组成 构造值对象,包含最高温度和最低温度 发射键值对,以复合键为键,值对象为值 ``` 接下来,我们需要定义Reducer函数的输入和输出。Reducer函数的输入应该是键值对,其中键是由城市和月份组成的复合键,值是一个包含最高温度和最低温度的可序列化对象的迭代器。Reducer函数的输出应该是键值对,其中键是由城市和月份组成的复合键,值是一个包含平均最高温度和平均最低温度的可序列化对象。 伪代码如下: ```python Reducer(输入: key, values): 计算所有值的平均最高温度和平均最低温度 构造值对象,包含平均最高温度和平均最低温度 发射键值对,以复合键为键,值对象为值 ``` 最后,我们需要运行MapReduce作业。我们可以使用Hadoop Streaming工具,通过标准输入和输出来传递数据。假设我们的Mapper函数定义在mapper.py文件中,Reducer函数定义在reducer.py文件中,我们可以使用以下命令来运行作业: ```bash hadoop jar hadoop-streaming.jar \ -mapper mapper.py \ -reducer reducer.py \ -input input_file \ -output output_dir ``` 其中,hadoop-streaming.jar是Hadoop Streaming工具的JAR文件;mapper.py和reducer.py是我们定义的Mapper和Reducer函数;input_file是输入文件的路径;output_dir是输出目录的路径。 通过这种方式,我们可以使用MapReduce分组统计天气信息,并且可以方便地扩展到更大的数据集和更复杂的统计任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值