zoukankan      html  css  js  c++  java
  • 大数据学习之十一——MapReduce代码实例:平面距离

    ***坐标距离***

    场景描述:

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

    数据(空格分开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);  

    }

    }

  • 相关阅读:
    fork()和vfork()的区别(转载)
    Linux中fork()函数详解(转载)
    ERROR:Simulator861-Failed to link the design解决办法
    ISE 14.7安装教程最新版(Win10安装)
    实验2用户及文件权限管理
    检验
    实验1基本概念及操作
    日常学习笔记(2)
    日常笔记1
    拷贝初始化的几种情况
  • 原文地址:https://www.cnblogs.com/m-study/p/8379170.html
Copyright © 2011-2022 走看看