2

私はHadoopを初めて使用します。入力ファイルを解析し、特定のパターンをその値とともにキーとして抽出するMapReduceプログラムを作成しました。私はそれを簡単に減らすことができ、最終的な出力はキーと値のペアを持つファイルです。

public class EReducer extends MapReduceBase implements Reducer<Text, Text, Text, Text>     
{

    private Text outputKey1 = new Text();
    private Text outputValue1 = new Text();


    public void reduce(Text equipKey1, Iterator<Text> equipValues1,
                    OutputCollector<Text, Text> results1, Reporter reporter1) throws IOException {
            String output1 = "";
  while(equipValues1.hasNext())
            {
                    Text equi= equipValues1.next();
                    output1 = output1 + equi.toString();
            }

                    outputKey1.set(equipKey1.toString());
                    outputValue1.set(output1);
                    results1.collect(outputKey1, outputValue1);
}

問題は、ファイルの先頭に、特定のキーのキーの総数と値の総数を集計として表示する必要があることです。

キー:日付

値:ハプニング。

何かのようなもの

12/03/2013 CMB ate pizza
           He went to a mall
           He met his friend

2013年12月3日の日付で合計3つの出来事がありました。日付と出来事のセットがあるように。

最後に、「日付」の日付に「このアクション数」があったことを示す必要があります。2013年12月3日などに3つのアクションがありました。

どうすればこれを達成できますか?どんな助けでもいただければ幸いです。

4

1 に答える 1

0

これが直接的な答えかどうかはわかりませんが、出力とともに集計を保存しません。Pig を使用して集計を取得することを検討してください。この使用例に適しています。

また、「ファイルの開始」の質問がわかりませんでした。レデューサー タスクには、複数のキーと値を使用できるため、ファイル「part-r-00000」は

12/01/2012 something something1 something2 
12/02/2012 abc abc1 abc2 

しかし、レデューサーから出力されたデータを集約せずに格納し、pig を使用してそれらを実行して必要なカウントを取得することに傾倒します (イベントを解析するには udf を実装する必要がありますが、これは非常に単純です)。

可能なスニペット

a = LOAD '/path/to/mroutput' as (dt:chararray, evdata:chararray);
b = foreach a generate dt, com.something.EVParser(evdata) as numberofevents;
c = store b into '/path/to/aggregateddata';
于 2013-06-01T02:31:31.690 に答える