public void map( LongWritable key, Text value, OutputCollector<DoubleWritable, DoubleWritable> output, Reporter reporter) throws IOException { String line = value.toString(); DoubleWritable clave = new DoubleWritable(); DoubleWritable valor = new DoubleWritable(); clave.set(Double.parseDouble(line)); valor.set(Math.sqrt(Double.parseDouble(line))); output.collect(clave, valor); }
public void map( LongWritable key, Text value, OutputCollector<IntWritable, DoubleWritable> output, Reporter reporter) throws IOException { /* * It implements the mapper. It outputs the numbers of weight and updated weights. * * Note that the format of intermediate output is <IntWritable, DoubleWritable>, * because the key is the number of weight (an integer), and the value is the weight's value (double) */ inputData = value.toString(); // go through the process initialize(); getposphase(); getnegphase(); update(); // output the intermediate data // The <key, value> pairs are <weightID, weightUpdate> double[][] vishidinc_array = vishidinc.getArray(); for (int i = 0; i < numdims; i++) { for (int j = 0; j < numhid; j++) { weightPos.set(i * numhid + j); weightValue.set(vishidinc_array[i][j]); output.collect(weightPos, weightValue); } } }
/* * Your output should be a in the form of (DoubleWritable score, Text word) * where score is the co-occurrence value for the word. Your output should be * sorted from largest co-occurrence to smallest co-occurrence. */ @Override public void reduce(DoubleWritable key, Iterable<Text> values, Context context) throws IOException, InterruptedException { // YOUR CODE HERE int amount = 0; for (Text gram : values) { key.set(new Double(Math.abs(key.get()))); context.write(key, gram); amount++; // When reach N_TO_OUTPUT stop if (amount == N_TO_OUTPUT) break; } }