:
2,1 - > 2:{1,0}及び1:{0,1}
2,3 - > 2:{1,0}及び3:{0,1}
1,2 - > 1:{1,0}と2: {0、1}
3,1 - > 3:{1,0}と1:{0,1}
4,2 - > 4:{1,0}及び> {0,1}、{1,0 -
1:2:{0、1}
その後減速では、各行がキーであり、各reduce
コールのための併用値これらの結果を取得します}、{0,1}(加算すると-1が生成されます)
2 - > {1,0}、2:{1,0}、2:{0,1}、2:{0,1 > {1,0}(それらが生成する加算 - > {0,1}、{1,0}
4(追加それらが0生み出す) - }
3(それらを追加すること0を生成します) 1)
アップデート:ここで
は、Hadoopの例である(それはテストされていませんし、それが働いて得るためにいくつかの調整が必要になる場合があります):
public class TheMapper extends Mapper<LongWritable, Text, Text, ArrayPrimitiveWritable>{
protected void map(LongWritable offset, Text value, Context context)
throws IOException, InterruptedException {
StringTokenizer tok = new StringTokenizer(value.toString(), ",");
Text col1 = new Text(tok.nextToken());
context.write(col1, toArray(1, 0));
Text col2 = new Text(tok.nextToken());
context.write(col2, toArray(0, 1));
}
private ArrayPrimitiveWritable toArray(int v1, int v2){
return new ArrayPrimitiveWritable(new int[]{i1, i2});
}
}
public class TheReducer extends Reducer<Text, ArrayPrimitiveWritable, Text, Text> {
public void reduce(Text key, Iterable<ArrayPrimitiveWritable> values, Context context)
throws IOException, InterruptedException {
Iterator<ArrayPrimitiveWritable> i = values.iterator();
int count = 0;
while (i.hasNext()){
int[] counts = (int[])i.next().get();
count += counts[0];
count -= counts[1];
}
context.write(key, new Text("" + count));
}
}
おかげで、私はロジックを取得します。これをJavaでどのように実装しますか? public void map {}に2つのオブジェクトキーが必要ですか? – ajax2000