Mapreduce算法五、mapJoin与标识
来源:互联网 发布:a算法八数码问题 编辑:程序博客网 时间:2024/06/06 03:04
package MRDemo;import java.util.ArrayList;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.LongWritable;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.mapreduce.lib.input.MultipleInputs;import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;/** * 统计没有农产品市场的省份有哪些,通过map join的方式统计 * * */public class NotMarketProvince { public static void main(String[] args) throws Exception { if(args.length!=3){ System.exit(0); } Job job = new Job(new Configuration(), "NotMarketProvince"); job.setJarByClass(NotMarketProvince.class); //分别设置输入与输出路径,注意此需要提供两个输入路径,所以用到MultipleInputs MultipleInputs.addInputPath(job, new Path(args[0]), TextInputFormat.class, AllProvinceMap.class); MultipleInputs.addInputPath(job, new Path(args[1]), TextInputFormat.class, MarketProvinceMap.class); FileOutputFormat.setOutputPath(job, new Path(args[2])); job.setReducerClass(ProvinceReduce.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(Text.class); job.waitForCompletion(true); } /** * 第一个map,所有的省份 */ public static class AllProvinceMap extends Mapper<LongWritable, Text, Text, Text>{ public static final String LABEL="a_"; //标识全部的省份 protected void map(LongWritable key, Text value, org.apache.hadoop.mapreduce.Mapper<LongWritable,Text,Text,Text>.Context context) throws java.io.IOException ,InterruptedException { /** * info的形式如下: * a_北京 a_山东 */ String info=LABEL+value.toString();// //第一个map输出的中间结果形式如下: //<北京,a_北京> context.write(value, new Text(info)); }; } /** * 第二个map,具有农产品市场的省份 */ public static class MarketProvinceMap extends Mapper<LongWritable, Text, Text, Text>{ public static final String LABEL="y_"; //标识具有农产品市场的省份 protected void map(LongWritable key, Text value, org.apache.hadoop.mapreduce.Mapper<LongWritable,Text,Text,Text>.Context context) throws java.io.IOException ,InterruptedException { String[] pros=value.toString().split("\t"); if (pros.length==6) { String province=pros[4].trim(); context.write(new Text(province), new Text(LABEL+pros)); } //第二个map输出的中间结果形式如下: //<北京,y_**************> }; } /** * 在下面的reduce中处理两个map的Shuffle阶断之后的中间结果 * 这两个map经过shuffle处理后,结果如下: * <北京,{y_**********,a_北京}> * <香港,{a_香港}> */ public static class ProvinceReduce extends Reducer<Text, Text, Text, Text>{ protected void reduce(Text key, java.lang.Iterable<Text> values, org.apache.hadoop.mapreduce.Reducer<Text,Text,Text,Text>.Context context) throws java.io.IOException ,InterruptedException { /*String pro=null; ArrayList<String> list = new ArrayList<String>(); for (Text value : values) { String info=value.toString(); if(info.startsWith(MarketProvinceMap.LABEL)){ String[] pros=info.substring(2).split("\t"); if (pros.length==6) { pro=pros[4].trim(); } }else if(info.startsWith(AllProvinceMap.LABEL)){ list.add(info.substring(2)); } } if(pro==null && list.size()>0){ for (String prov : list) { context.write(new Text(prov), new Text("")); } }*/ boolean hasMarket = false; for (Text value : values) { String prov = value.toString(); if (prov.startsWith(MarketProvinceMap.LABEL)) { hasMarket = true; } } if(!hasMarket){ context.write(key, new Text("")); } }; }}
0 0
- Mapreduce算法五、mapJoin与标识
- MapReduce算法形式四:mapjoin-reduce端的
- Hive mapjoin 与 Bucket mapjoin
- MapReduce实现CommonJoin和MapJoin
- MapReduce算法形式五:TOP—N
- 数据结构与算法五
- MapReduce 映射与化简算法
- MapReduce 映射与化简算法
- MapReduce与遗传算法、MapReduce与粒子群算法结合与实现
- Hadoop学习笔记(五):MapReduce的类型与格式
- Hadoop之MapReduce输入与输出格式(五)
- MapReduce算法
- 数据结构与算法(五)
- MapReduce(五):表关联
- mapreduce(五):Shuffle过程
- HBASE(五 MapReduce)
- 数据结构与算法之五大算法
- 服务器标识与识别
- Android性能优化大纲(自我总结)
- vbs给word和wps上个u盘锁
- 在c/c++中的&、|和&&、||的区别(易混淆)
- 《C和指针》 第三章 数据(2)
- hdu 1787 GCD Again (欧拉函数在线模板)
- Mapreduce算法五、mapJoin与标识
- C++模板类内友元(友元函数,友元类)声明的三种情况
- POJ 3761 Bubble Sort (乘方取模)
- 设备
- hdoj-【3555 Bomb】
- greendao3.0以上使用步骤(一):基础使用
- 如何判断文件大小?
- 你知道顺汇与逆汇的差别吗!
- 欢迎使用CSDN-markdown编辑器