MapWritable works if you use a binary format like SequenceFileOutputFormat. If you need a plain text output, you can use a library like Jackson to generate a string representation -- or look for a custom OutputFormat that already does that for you.
I have a reducer that outputs pairs of the form<Text, MapWritable>.  The
MapWritable is a map from Text to Long.  The key and output values of my
reducer are declared like so:

       job.setOutputKeyClass(Text.class);
       job.setOutputValueClass(MapWritable.class);

The last few lines of my reducer look like this:

          MapWritable value = new MapWritable();
          for (Map.Entry<String, Long>  entry : totalWordCount.entrySet())
             value.put(new Text(entry.getKey()), new
LongWritable(entry.getValue()));
          context.write(key, value);

In the debugger I can see that my MapWritable value is a map with the values
I expect it to contain.  However, when I run the MapReduce process the
output literally looks like this:

key1      org.apache.hadoop.io.MapWritable@396cbd97
key2         org.apache.hadoop.io.MapWritable@17991de1
key3         org.apache.hadoop.io.MapWritable@18f63055

The values are descriptive stringifications of the MapWritable class without
any data.  What I want instead are serializations of the maps that contain
their data. I thought the point of the MapWritable class was that it handled
serialization for you. Is there a step I'm missing?

Cheers,
Marcos
--
------------------------------------------------------------------------
Marcos Medrado Rubinelli
EstatĂ­stica - Comparison Shopping - BuscaPĂ©

Reply via email to