odps mapreduce学习笔记

一、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对应的多个values
public 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





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值