2

私は自分の問題に対して 0 reduce アプローチを使用しています。あるファイルのデータを前処理してから別のファイルとして書き出したいのですが、改行やタブ区切りはありませんか? 前処理を除いた同じファイル形式でデータを処理したマップ ジョブを出力するにはどうすればよいですか。つまり、次のようなものがあります。

前処理:

<TITLE> Herp derp </Title> I am a major general  

後処理:

Herp 
Derp 
I 
am 
a
major
general

私がやりたいことはこれです:

Herp Derp I am a major general 

問題は次のコード行にあると思います。

job.setOutputFormatClass(TextOutputFormat.class);

しかし、私が試みたとき、かなり素朴に次のようなことをしました:

job.setOutputFormatClass(null);

それは明らかにうまくいきません。これを行うために使用できる形式クラスが提供されていますか? そうでない場合、自分のクラスを作成して、すべてを希望どおりに出力するにはどうすればよいですか? Hadoop と map reduce は初めてです。

以下にマップ機能を含めました。マップとレデューサーの間でソートされるため、reduce は使用したくありません。

        public void map(LongWritable key, Text value, Context context)
                throws IOException, InterruptedException {

            String line = value.toString();
            StringTokenizer tokenizer = new StringTokenizer(line);


            while (tokenizer.hasMoreTokens()) {

                word.set(tokenizer.nextToken());

                //Did preprocessing here, irrelevant to my problem

                context.write(word, null);
            }
        }

また、私もこれをグーグルで検索し、apache hadoop api を読んで、答えを見つけることができるかどうかを確認しました。

4

2 に答える 2

1

マッパー クラスで、行を個々の単語に解析して書き出す代わりに、行全体を

context.write(word, null);

そうすれば、行を 1 つずつ送信するのではなく、最初に一緒に作業していた文字列全体を保持できます。

そのため、前処理作業のために文字列を切り離し、context.write コマンドで送信するときに元に戻します。

于 2013-09-28T20:42:33.203 に答える