MapReduce下的数据传递

好久没写点文章了,上一篇文章都是4月的了。实在不应该。实习是解决了,但随后的事也多了去了。实验报告、课程设计、比赛、论文、软考、考试。我嘞个去,杂那么多哟~~ 忙是忙,但还是不要忘里学习。今天来讨论上次做TF-IDF时遇到的问题---MapReduce下的数据传递。

我们写MapReduce程序时,有时需要将一定的值(这里是少量 的)从cilent传到map或者reduce.又或者从map传到reduce。

我们先来讨论比较简单的第一种。

解决办法,在main()函数中通过xml文件设定需要传送的值。然后在map函数中读取就行了。

第二种肯定不能使用第一种的方法。因为map阶段跟reduce阶段不一定在同一台机子上,就算map设定了值,reduce也不能够读出来。这里我们就只有使用笨办法了,直接从文件里读。

闲话少说,上代码:

注释我基本写在了代码里。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
MapReduce是一种分布式计算框架,可以用于大规模数据处理。在MapReduce实现数据去重可以通过自定义Mapper和Reducer类来实现。具体步骤如下: 1. 自定义Mapper类,将输入数据作为键值对传递给Reducer类,其键为输入数据,值为NullWritable。 2. 自定义Reducer类,接收Mapper类传递过来的数据,根据Shuffle工作原理,键值相同的数据会被合并,因此输出数据就不会出现重复数据了。 3. 在MapReduce作业指定自定义的Mapper和Reducer类,并设置输入和输出路径。 下面是一个简单的MapReduce实现数据去重的例子: 1. 自定义Mapper类: ``` public class DeduplicateMapper extends Mapper<LongWritable, Text, Text, NullWritable> { private static Text field = new Text(); @Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { field = value; context.write(field, NullWritable.get()); } } ``` 2. 自定义Reducer类: ``` public class DeduplicateReducer extends Reducer<Text, NullWritable, Text, NullWritable> { @Override protected void reduce(Text key, Iterable<NullWritable> values, Context context) throws IOException, InterruptedException { context.write(key, NullWritable.get()); } } ``` 3. 在MapReduce作业指定自定义的Mapper和Reducer类,并设置输入和输出路径: ``` Job job = Job.getInstance(conf, "deduplicate"); job.setJarByClass(Deduplicate.class); job.setMapperClass(DeduplicateMapper.class); job.setReducerClass(DeduplicateReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(NullWritable.class); FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); System.exit(job.waitForCompletion(true) ? 0 : 1); ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值