「Hadoop は、リデューサーに送信される前にマッパーによって出力されたデータを自動的にソートする」と言われているため、キー値をソートするために (Hadoop で) マップのみのジョブを実行します。
入力ファイル
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 に示すようにこのファイルをソートする必要があると思います。これをローカルマシンで実行すると、実際に実行されました。しかし、これをクラスターで実行すると、出力は output2 のようになります。
出力1ファイル
747767 2013-04-18
807924 2013-04-19
828286 2013-04-17
835352 2013-04-15
846299 2013-04-16
output2 ファイル
835352 2013-04-15
747767 2013-04-18
807924 2013-04-19
828286 2013-04-17
846299 2013-04-16
出力1のように常になるようにするにはどうすればよいですか。2 番目の列で並べ替えるための別の提案をお待ちしています。
マッパー
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);
}
}
}
}