统计乘用车辆,商用车辆的数量销售和销售额分布

统计乘用车辆,商用车辆的数量销售和销售额分布

/**
* 根据汽车所属(个人,商用)来进行划分
* 计算乘用车辆,商用车辆各自的数量,以及各自所占的比重
*/
public static class CountMap extends Mapper<LongWritable, Text, Text, LongWritable>{

	@Override
	public void map(LongWritable key, Text value,				
			Mapper<LongWritable, Text, Text, LongWritable>.Context context)
			throws IOException, InterruptedException {
		
		String [] owns = value.toString().trim().split(" ");
		if(null != owns && owns.length > 10 && owns[10] != null) {
			if(owns[10].equals("非营运")) {
				context.write(new Text("乘用车辆"), new LongWritable(1));
			}else {
				context.write(new Text("商用车辆"), new LongWritable(1));
			}
		}			 
	};
}




/**
 * 统计乘用车辆和商用车辆的数量以及他们的总量
 */
public static class CountReduce extends Reducer<Text, LongWritable, Text, DoubleWritable> {
	Map<String,Long> maps = new HashMap<String,Long>();
	//准备存放非营运的乘用车辆和营运的商用车辆的总和
	double all = 0;
	@Override
	public void reduce(Text key, Iterable<LongWritable> values,Context context) throws IOException, InterruptedException {
		 Long sum = (long) 0;
		 for (LongWritable val : values) {
			sum += val.get();
		}
		 //求出车辆的总和
		 all += sum;
		 maps.put(key.toString(),sum);
	};

	protected  void cleanup(
			org.apache.hadoop.mapreduce.Reducer<Text, LongWritable, Text, DoubleWritable>.Context context) throws IOException, InterruptedException {
		Set<String> keySet = maps.keySet();
		//循环set集合中的乘用车辆和商用车辆的数量
		for (String str : keySet) {
			long value = maps.get(str);
			//用乘用车辆/总量  和  商用车辆/总量,求出各自的比例
			double percent = value/all;
			//输出的key为车辆类型,value的值为该车辆类型的占比
			context.write(new Text(str), new DoubleWritable(percent));
		}
	};
}
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值