2

大きな犯罪統計データ セットを分析しようとしています。ファイルは CSV 形式で約 2 GB です。約 20 の列がありますが、私が興味を持っているのはそのサブセット (Crime_Type と Crime_in_Year) だけです。たとえば、犯罪タイプ「強盗」は、2001 年から 2013 年にかけて毎年発生しています。毎年の強盗の発生数をカウントする結果が必要です。

だから私はキーを持つことを考えています.値は2003年に発生したものの合計になります.hadoop/mapreduceのキーとして値のペアを持つことは可能ですか?

4

2 に答える 2

2

Keyを実装する限り、Aは何でもかまいませんWritableここに示すように、独自のカスタム キーを非常に簡単に作成できます。

したがって、ドキュメントから借りると、1つの実装は

public class CrimeWritable implements Writable {    
       private int year;
       private String type;

       public void write(DataOutput out) throws IOException {
         out.writeInt(year);
         out.writeBytes(type);
       }

       public void readFields(DataInput in) throws IOException {
         year = in.readInt();
         type = in.readBytes();
       }

       public static CrimeWritable read(DataInput in) throws IOException {
         CrimeWritable w = new CrimeWritable();
         w.readFields(in);
         return w;
       }
     }

関連するメモとして、 CascadingApache Sparkなどの map-reduce よりも高レベルの抽象化の使用を検討することをお勧めします。

于 2013-10-18T05:34:31.057 に答える
0

考えられるペアの 1 つを次に示します。map()関数でキーと値のペアを
(Crime_Year CrimeType, value)として生成します
。キーを「Crime_Year Burglary」に設定し、値を整数値にします。これは実際には、特定のデータセットで犯罪の種類が「強盗」であるかどうかを確認し、それと Crime_Year を連結し、この文字列をキーとして設定し、値を整数 1 にすることを意味します。

同じキーを持つすべてのreduce()値を合計します。

例: map()出力:
<2001 年強盗、1>
<2001 年強盗、1>
<2002 年強盗、1>
<2003 年強盗、1>

reduce()出力 (同じキーの値を合計します):


<2001年強盗、2>
<2002年強盗、1>
<2003年強盗、1>

最後に、合計数を取得します。年間の犯罪数。

于 2016-01-28T10:32:45.137 に答える