我运行一个仅限地图的作业(在Hadoop上)以便对键值进行排序,因为它说“Hadoop会在发送给reducer之前自动对映射器发出的数据进行排序”。
2013-04-15 835352
2013-04-16 846299
2013-04-17 828286
2013-04-18 747767
2013-04-19 807924
我认为Map(second_cloumn,first_column)应对此文件进行排序,如output1所示。它实际上是在我本地机器上运行的时候做的。但是当我在集群上运行它时,输出就像输出2中所示。
747767 2013-04-18
807924 2013-04-19
828286 2013-04-17
835352 2013-04-15
846299 2013-04-16
835352 2013-04-15
747767 2013-04-18
807924 2013-04-19
828286 2013-04-17
846299 2013-04-16
我怎样才能保证它总是像在output1中一样。我愿意接受第二栏排序的其他建议。
public class MapAccessTime1 extends Mapper<LongWritable, Text, IntWritable, Text> {
private IntWritable one = new IntWritable(1);
private Text word = new Text();
@Override
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String line = value.toString();
int val = 0;
StringTokenizer tokenizer = new StringTokenizer(line);
if (!line.startsWith("#")) {
if (tokenizer.hasMoreTokens()) {
word.set(tokenizer.nextToken());
}
if (tokenizer.hasMoreTokens()) {
val = Integer.parseInt(tokenizer.nextToken());
one = new IntWritable(val);
context.write(one, word);
}
}
}
}
答案 0 :(得分:0)
MapOnly作业不会进行随机播放和排序。使用身份缩减器解决了我的问题。