您现在的位置: 爱51代码网 >> 范文 >> 文章正文
设计mapreduce计算所有酒店1公里范围内的地标
public static class HotelReducer extends Reducer<Hotel, NullWritable, Text, NullWritable> {
 
        @SuppressWarnings("unused")
        public void reduce(Hotel key, Iterable<NullWritable> value, Context context) throws IOException, InterruptedException {
            int count = 0;
            ArrayList<Hotel> MyHotel = new ArrayList<Hotel>(); // 一个group中可能会有多个酒店,用arraylist作为酒店容器
            for (NullWritable x : value) {
                if (count == 0 && key.getType() != 0)
                    break;
                if (key.getType() == 0) {
                    try {
                        MyHotel.add((Hotel) key.clone());
                    }
                    catch (CloneNotSupportedException e) {}
                } else {
                    for (Hotel h : MyHotel) {
                        double dis = Math.sqrt(Math.pow(h.getX() - key.getX(), 2) +
                                Math.pow(h.getY() - key.getY(), 2));
                        if (dis <= 1000) {
                            // 输出格式 :酒店ID 地标ID 距离(测试用)。抛弃没有酒店关系的地标数据
                            context.write(new Text(h.getID() + "\t" + key.getID() + "\t"
                                    + (int) dis), NullWritable.get());
                        }
                    }
                }
                ++count;
            }
        }
    }
}
 
// 把酒店地标数据重新划分到不同的reduce
class HotelPartitioner extends Partitioner<Hotel, NullWritable> {
    public int getPartition(Hotel key, NullWritable value, int numPartitions) {
        return Math.abs((int) ((key.getXa() + key.getYa()) % numPartitions));
    };
}
 
//自定义Group 根据1000*1000的块重新洗牌聚合
class HotelGrouping extends WritableComparator
{
    protected HotelGrouping()
    {
        super(Hotel.class, true);
    }
 
    @SuppressWarnings("rawtypes")
    @Override
    // 比较 WritableComparables.
    public int compare(WritableComparable w1, WritableComparable w2)
    {
        Hotel h1 = (Hotel) w1;
        Hotel h2 = (Hotel) w2;
        int r1x = h1.getXa();
        int r1y = h1.getYa();
      

上一页  [1] [2] [3] [4] [5] [6] 下一页

  • 上一篇文章:

  • 下一篇文章: 没有了
  • 最新文章 热点文章 相关文章
    Unable to write data to the tr
    asp.net中listbox的items.count属
    C#不是每次查询数据是不是被缓存
    ASP.NET发布后能加载引用的js文件
    Hadoop2.2.0在eclipse控制台没有
    maven如何加自定义的包
    redhat 2.6 (santigo 5.6) vsftp
    shell如何实现自动填写操作执行下
    linux shell 文件配置sh:color:
    shell script语法一定要加path吗
    Hadoop2.2.0在eclipse控制台没有
    maven如何加自定义的包
    redhat 2.6 (santigo 5.6) vsftp
    shell如何实现自动填写操作执行下
    linux shell 文件配置sh:color:
    shell script语法一定要加path吗
    SecureCRT如何访问虚拟机vmWare中
    C#如何读取WINDOWS的放大系数
    cximge的图如何存入数据库并提取
    DBGRID控件显示查询结果文本类型
    mahout训练出来的分类模型如
    安装cloudera cdh5.2.0后执行
    sqoop数据导出不完整
    hadoop distcp源集群如何识别
    Hadoop2.2.0在eclipse控制台
    windows客户端如何访问hdfs
    yarn.scheduler.fair.locali
    asp中的access年度成绩查询排
    access如何用SQL语句查询时间
    sqlserver数据库刚启动 客户
     



    设为首页 | 加入收藏 | 网站地图 | 友情链接 |