用hadoop统计A call B的次数

本文介绍了一个使用Hadoop MapReduce实现的Java程序,该程序用于处理电话计费记录,统计不同计费期的呼叫次数。通过对输入数据进行映射和归约操作,程序能够有效地汇总每个计费期的呼叫总数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.util.GenericOptionsParser;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;



public class CallCount {
	public static class BILLING_TERM_Mapper extends 
	    Mapper<Object, Text, Text, IntWritable> {

    private final static IntWritable one = new IntWritable(1);
    private Text word = new Text();

    public void map(Object key, Text value, Context context)
		throws IOException, InterruptedException {

	String line = value.toString();
	String details[] = line.split("	");
	String BILLING = details[0];
	String TERM = details[1];
	String BILLING_TERM_String = BILLING + "-" + TERM;
	word.set(BILLING_TERM_String);

	if(!"null".equals(BILLING) && !"".equals(BILLING)){
		context.write(word, one);
	}
  }
 }

   public static class BILLING_TERM_Reducer extends
	  Reducer<Text, IntWritable, Text, IntWritable> {
   private IntWritable result = new IntWritable();

   public void reduce(Text key, Iterable<IntWritable> values,
		  Context context) throws IOException, InterruptedException {
	  
	  int sum = 0;
	  for (IntWritable val : values) {
		  sum += val.get();
	  }
	  result.set(sum);
	  context.write(key, result);
  }
 }
   public static void main(String[] args) throws Exception{
		Configuration conf = new Configuration();
		String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
		if (otherArgs.length != 2){
			System.err.println("Usage: callcount ");
			System.exit(2);
		}
		/** Create A Job, Give A name, Tracking It**/
		Job job = new Job(conf, "Call Count");
		job.setJarByClass(CallCount.class);
		job.setMapperClass(BILLING_TERM_Mapper.class);
		job.setCombinerClass(BILLING_TERM_Reducer.class);
		job.setReducerClass(BILLING_TERM_Reducer.class);
		job.setOutputKeyClass(Text.class);
		job.setOutputValueClass(IntWritable.class);
		
		FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
		FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
		
		System.exit(job.waitForCompletion(true) ? 0 : 1);
	}
}

数据:

  
用hadoop统计A call B的次数(原创) - zarchary-10 - zarchary的博客
 
结果:
 
 

  
用hadoop统计A call B的次数(原创) - zarchary-10 - zarchary的博客

转载于:https://my.oschina.net/u/242736/blog/83252

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值