用户流量案例

.用户流量案例
统计每个用户的总流量
统计每个用户的总访问量 , map端以用户的手机号为key输出, 以用户的记录bean为value
reduce会将数据按照用户的手机号分组 , reduce中统计各个用户的总流量,输出用户手机号和用户的总流量
**

FlowBean

**
public class FlowBean implements Writable{
private String tel ;//电话
private String url ;//连接信息
private double downFlow ;//上传流量
private double upFlow ;//下载流量
**

mapreduce程序

**
public class FlowDemo {
public static class FlowMapper extends Mapper<LongWritable, Text, Text, FlowBean> {
Text k = new Text();
FlowBean v = new FlowBean();

	@Override
	protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, FlowBean>.Context context)
			throws IOException, InterruptedException {
		// 13026230503 http://v.baidu.com/tv 20 5000
		String[] split = value.toString().split("\\s");
		String tel = split[0];
		String url = split[1];
		double upFlow = Double.parseDouble(split[2]);
		double downFlow = Double.parseDouble(split[3]);
		k.set(tel);
		v.setTel(tel);
		v.setUpFlow(upFlow);
		v.setDownFlow(downFlow);
		v.setUrl(url);
		context.write(k, v);
	}
}
public static class FlowReducer extends Reducer<Text, FlowBean, Text, DoubleWritable> {
	@Override
	protected void reduce(Text tel, Iterable<FlowBean> iter,
			Reducer<Text, FlowBean, Text, DoubleWritable>.Context context)
			throws IOException, InterruptedException {
		double count = 0 ;
		for (FlowBean flowBean : iter) {
			count+=flowBean.getUpFlow()+flowBean.getDownFlow() ;
		}
		context.write(tel ,new DoubleWritable(count));
	}
}
public static void main(String[] args) throws Exception {
	Configuration conf = new Configuration();
	/*conf.set("mapreduce.framework.name","local");
	conf.set("fs,defaultFS", "file:///");*/
	Job job = Job.getInstance(conf);
	job.setMapperClass(FlowMapper.class);
	job.setReducerClass(FlowReducer.class);
	
	job.setMapOutputKeyClass(Text.class);
	job.setMapOutputValueClass(FlowBean.class);
	
	job.setOutputKeyClass(Text.class);
	job.setOutputValueClass(DoubleWritable.class);
	
	FileInputFormat.setInputPaths(job, new Path("d:/data/flow/input"));
	FileOutputFormat.setOutputPath(job, new Path("d:/data/flow/output"));
	
	job.setNumReduceTasks(1);
	boolean b = job.waitForCompletion(true);
	System.exit(b?0:-1);
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值