odps mapreduce学习笔记

来源:互联网 发布:linux查cpu核数 编辑:程序博客网 时间:2024/05/01 10:31

一、map函数

    //record表示输入表的每一行记录    public void map(long recordNum, Record record, TaskContext context) throws IOException {      for (int i = 0; i < record.getColumnCount(); i++) {//遍历每一列        String[] words = record.get(i).toString().split("\\s+");        for (String w : words) {          word.set(new Object[] {w});          context.write(word, one);        }      }    }
参数:

1、recordNum表示: 当前输入是第几行记录?

2、record表示:表格的每一行记录。在map函数中,record代表读入的一行数据,可以通通过record.get(n)方法获取该行记录第n列的数据。并且方便的是,这里可以直接对读入的数据进行一个类型转换。例如record.getString()会把读入的数据转为字串,record.getBigInt()则会把读入的数据转为Long型整数。

3、context:每调用一次write函数,就会输出一行记录。context.write(key,value)的意思是输出这条key-value,如果不写这行,Mapper就什么都不输出。一个Mapper可以有0个或多个key-value的输出,每调用一次context.write(key,value)就会输出一行。

二、reduce函数

//输入map阶段每个key,以及每个key对应的多个valuespublic void reduce(Record key, Iterator<Record> values, TaskContext context) throws IOException {  long count = 0;  while (values.hasNext()) {    Record val = values.next();    count += (Long) val.get(0);  }  result.set(0, key.get(0));//设置第一列为key  result.set(1, count);//设置第二列为count  context.write(result);//添加本条记录}

参数:

1、key:对应到map阶段输出每个key;

2、values参数:是一个Iterator,通过调用values.next()来读取所有属于该key的记录。每读取一行记录,可进行相应操作;

3、输出context:Reducer的output是一个Record类,可以通过output.set(n)来设定该output第n列的数值,同样使用context.write(output)输出一行记录。



参考资料:

https://www.zybuluo.com/chanvee/note/11984





原创粉丝点击