-1


実はこれは mapreduce プログラムです。これは私の単純なワードカウントプログラムです:

 public static class MapClass extends MapReduceBase
    implements Mapper<LongWritable, Text, Text, IntWritable> {

    private final static IntWritable one = new IntWritable(1);
    private Text word = new Text();

    public void map(LongWritable key, Text value,
                    OutputCollector<Text, IntWritable> output,
                    Reporter reporter) throws IOException {
      String line = value.toString();
      StringTokenizer itr = new StringTokenizer(line);
      while (itr.hasMoreTokens()) {
        word.set(itr.nextToken());
        output.collect(word, one);


ここでは、ファイル内の単語数を数えます。

しかし、ファイルの各段落の単語を取得する必要はありません..各段落の数値を取得します。その番号に基づいてマップします。

4

1 に答える 1

1

特定の行がどの段落にあるかを理解することは、単一のマッパー内では実際には不可能です。そのロジックの一部を別の場所に配置する必要があります。

1 つのアプローチは、一度に行ではなく段落全体をマッパーに渡す新しい InputFormat を作成することです。現在、マッパーには行のテキストと行番号の両方が渡されます。この別のアプローチでは、段落全体と段落番号が渡されます。

スケーラビリティの低いアプローチは、行番号と段落番号の間のマッピングを作成することです。ワード カウント マッパーでは、単語、カウント、および単語が含まれる行を書き出すことができます。次に、それらのレコードを行から段落へのマッピングで結合して、各段落の単語数を生成できます。

于 2012-10-14T13:15:57.007 に答える