最近想用Hadoop实现一个A的转置乘以A的矩阵运算,假设A是100w*100的矩阵,想把100w行特征分成100个map,每个map处理1w行,每个map一次性处理1w行,而不是一行一行处理。
hadoop0.21.0这个版本已经实现了NLineInputFormat这个方法
job.setInputFormatClass(NLineInputFormat.class);
NLineInputFormat.addInputPath(job, in);
NLineInputFormat.setNumLinesPerSplit(job,10000);
这样可以实现每个map处理10000行的需求,100万行就是100个map,而不是默认的按物理块大小分配map,但是这个接口内部调用map方法的时候,仍是一行一行处理的,map方法会被执行10000次,现在改写linereader,让map方法只执行一次,每次处理10000行。
首先定义myLineInputFormat类,将job的读入方式设成myLineInputFormat。