SortedPriceName排序代码(基于mapreduce处理逻辑)

原创 2016年06月01日 05:28:11

SortedPriceName排序代码(基于mapreduce处理逻辑)


mapper.java


package com.doggie.test;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.lib.input.FileSplit;

import java.io.IOException;

/**
 * Created by root on 5/25/16.
 */
public class mapper extends Mapper<Object,Text,LongWritable,Text> {
    public void map(Object key,Text value,Context context)
        throws IOException,InterruptedException{
        String fileName = ((FileSplit)context.getInputSplit()).getPath().toString();
        String valueString= value.toString();
        String[] items=valueString.split(" ");

        LongWritable outputKey = null;
        Text outputValue=null;

        if(fileName.contains("price")){
            outputKey = new LongWritable(Long.valueOf(items[0]));
            outputValue = new Text(items[1]);
        }else{
            outputKey = new LongWritable(Long.valueOf(items[1]));
            outputValue = new Text("name" + items[0]);
        }
        context.write(outputKey,outputValue);
    }
}


---

reducer.java

---

package com.doggie.test;


import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileSplit;

import java.io.IOException;
import java.util.TreeSet;

/**
 * Created by root on 5/25/16.
 */
public class reducer extends Reducer<LongWritable,Text,Text,LongWritable> {
    public void reduce(LongWritable key, Iterable<Text>values, Context context)
            throws IOException, InterruptedException {

        Text itemName = null;
        TreeSet<LongWritable> queue = new TreeSet<LongWritable>();

        for (Text val : values){
            if(val.toString().startsWith("name")){
                String realName = val.toString().substring(4);
                itemName = new Text(realName);
            }else{
                LongWritable price = new LongWritable(Long.valueOf(val.toString()));
                queue.add(price);
            }
        }
        for (LongWritable val : queue) {
            context.write(itemName, val);
        }
    }
}



---

main

---
package com.doggie.mtest;


import com.doggie.test.mapper;
import com.doggie.test.reducer;
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.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;

/**
 * Created by root on 5/25/16.
 */
public class Homework {
    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        String[] otherArgs = new GenericOptionsParser(conf, args)
                .getRemainingArgs();
        if (otherArgs.length != 2) {
            System.err.println("Usage: homework");
            System.exit(2);
        }
        //conf.setInt("mapred.task.timeout",100);
        Job job = new Job(conf, "homework");
        job.setInputFormatClass(TextInputFormat.class);
        job.setJarByClass(Homework.class);
        job.setMapperClass(mapper.class);
        job.setReducerClass(reducer.class);
        job.setMapOutputKeyClass(LongWritable.class);
        job.setMapOutputValueClass(Text.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(LongWritable.class);
        job.setNumReduceTasks(1);
        FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
        FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
        System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
}

[两个输入文件样本](https://yunpan.cn/cSDYkqREN9N3H  访问密码 ff1b)
版权声明:本文为博主原创文章,未经博主允许不得转载。

用MapReduce处理一组流量数据,并按总流量排序

用MapReduce处理一组流量数据、并排序
  • jiang0426
  • jiang0426
  • 2016年05月13日 14:40
  • 901

mapreduce实现全局排序

直接附代码,说明都在源码里了。   package com.hadoop.totalsort; import java.io.IOException; import java.util.A...
  • u011750989
  • u011750989
  • 2013年09月09日 16:58
  • 1097

使用MapReduce进行排序

之前在工作中使用到过MapReduce的排序,当时对于这个平台的理解还比较浅显,选择的是一个最为简单的方式,就是只用一个Recude来做。因为Map之后到Reduce阶段,为了Merge的方便,Map...
  • a6210575
  • a6210575
  • 2014年02月19日 21:24
  • 1184

hadoop2.x入门:编写mapreduce对气象数据集求每日最高气温和最低气温

1.下载气象数据集气象数据集下载地址为: - ftp://ftp.ncdc.noaa.gov/pub/data/noaa我们下载国内的气象数据,使用下面命令进行下载wget -D --accept-...
  • erygreat
  • erygreat
  • 2017年07月23日 19:30
  • 563

Hadoop MapReduce做大数据排序

1. 我们知道mapreduce天生适合作排序,由于他有一个shuffer的过程,当数据量很少的时候我们可以把reduce的num设置成1来进行排序,但是如果数据量很大,在一个reduce上处理不过来...
  • JThink_
  • JThink_
  • 2014年10月31日 17:48
  • 2717

Mapreduce 的简单例子2 多个文件的数字排序

并行算法能算很多东西,不只是计数,wordCount是一个比较简单的例子,很多其他的请参见我上传的基于mapreduce 的并行算法的设计。 今天来实现一个排序的简单例子。实现过程从简,因为具体的流程...
  • qq_30395513
  • qq_30395513
  • 2017年11月16日 20:57
  • 117

mapreduce之自定义排序算法

有人说mapreduce中不是有一个自动排序和分组(按key排序和分组)的嘛,我们为什么还需要自己写排序算法呢? 因为很多时候这种自动排序无法满足我们的需求,所以我们需要自定义排序算法! 需求1:...
  • zwx19921215
  • zwx19921215
  • 2014年03月07日 15:33
  • 7416

MapReduce---自定义分区类实现全排序

排序是MapReduce的核心技术,排序分为部分排序,全排序和二次排序。 部分排序:调用默认的HsshPartitioner,不需要操作,每个reduce聚合的key都是有序的。 全排序:对red...
  • tian_qing_lei
  • tian_qing_lei
  • 2017年08月18日 21:23
  • 202

MapReduce排序过程详解

Hadoop、Spark等分布式数据处理框架在宣传自己的性能时大都以排序效果来做比较,各种类别的Sort Benchmark已成为行业基准测试。之所以选择排序是因为排序的核心是shuffle操作,数据...
  • zr459927180
  • zr459927180
  • 2016年04月26日 11:38
  • 5597

MapReduce算法形式十一:自定义排序(即重写shuffle过程的排序规则)

案例十一:自定义排序(即重写shuffle过程的排序规则) 这个案例有点难理解,但学会了非常方便,shuffle的排序过程是自然排序的(数值小 大,其他字符Unicode),如果不改变shu...
  • yoghurt2016
  • yoghurt2016
  • 2016年09月11日 12:26
  • 1125
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SortedPriceName排序代码(基于mapreduce处理逻辑)
举报原因:
原因补充:

(最多只允许输入30个字)