码迷,mamicode.com
首页 > 其他好文 > 详细

大数据学习之十一——MapReduce代码实例:平面距离

时间:2018-01-29 20:19:29      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:dex   double   conf   代码实现   ast   iter   val   txt   xtend   

***坐标距离***

场景描述:

已知一个单身美女的坐标,和一群单身帅哥的坐标,求离美女最近的帅哥

数据(空格分开x、y坐标): (10,12)(23,23)(20,20)(1,3)(23,7)

假设美女的坐标为(5,5)

技术分享图片

代码实现:

public class distance2 {     

static String INPUT_PATH="hdfs://master:9000/input/h.txt";  

static String OUTPUT_PATH="hdfs://master:9000/output/distance2";    

static class MyMapper extends Mapper<Object,Object,DoubleWritable,Text>{    //距离作为double类型,输出格式控制

DoubleWritable output_key=new DoubleWritable();   

DoubleWritable output_value=new DoubleWritable();   

DoubleWritable out_distance=new DoubleWritable();   

Text record=new Text();   //输出格式的控制

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

String[] tokens=value.toString().split(",",2);     //按照,分隔开

output_key.set(Double.parseDouble(tokens[0]));    //第一列给坐标x

output_value.set(Double.parseDouble(tokens[1]));    //第二列给坐标y

double x1=output_key.get()-5;    //平面距离公式

double y1=output_value.get()-5;    

double x=output_key.get();    

double y=output_value.get();        

String rec="x:"+x+","+"y:"+y;            //输出格式

out_distance.set(Math.sqrt(Math.pow(x1, 2)+Math.pow(y1, 2)));   

 record.set(rec);    

context.write(out_distance, record);   

}  

}  

 static class MyReduce extends Reducer<DoubleWritable,Text,DoubleWritable,Text>{   

DoubleWritable output_key=new DoubleWritable();  

 DoubleWritable output_value=new DoubleWritable();    

protected void reduce(DoubleWritable key,Iterable<Text> values,Context context) throws IOException,InterruptedException{    

while(values.iterator().hasNext()){       //循环写入

context.write(key,values.iterator().next());   

 }   

 }    

public static void main(String[] args) throws Exception{   

Path outputpath=new Path(OUTPUT_PATH);   

Configuration conf=new Configuration();      

Job job=Job.getInstance(conf);   

FileInputFormat.setInputPaths(job, INPUT_PATH);  

 FileOutputFormat.setOutputPath(job,outputpath);     

 job.setMapperClass(MyMapper.class);   

job.setReducerClass(MyReduce.class);     

 job.setOutputKeyClass(DoubleWritable.class);  

 job.setOutputValueClass(Text.class);      

job.waitForCompletion(true);  

}

}

 

大数据学习之十一——MapReduce代码实例:平面距离

标签:dex   double   conf   代码实现   ast   iter   val   txt   xtend   

原文地址:https://www.cnblogs.com/m-study/p/8379170.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!