ArrayWritables can't be deserialized because they don't encode the type of
the objects with the data. The solution is to sub-class ArrayWritable with
your specific type. In your case, you'd need to do this:
public class IntArraryWritable {
public IntArrayWritable() {
super(IntWritable.class);
}
public IntArrayWritable(IntWritable[] data) {
super(IntWritable.class, data);
}
}
Then use IntArrayWritable in your code segments below. You can see this
documented in the java docs:
http://hadoop.apache.org/common/docs/r0.20.203.0/api/org/apache/hadoop/io/ArrayWritable.html
-Joey
On Mon, Jul 18, 2011 at 3:57 PM, Geoffry Roberts
<[email protected]>wrote:
> All,
>
> For the first time I have tried to use the class ArrayWritable. All goes
> well enough until the Reducer tries to do a write. Then, I get the
> following exception:
>
> java.lang.RuntimeException: java.lang.NoSuchMethodException:
> org.apache.hadoop.io.ArrayWritable.<init>()
> ...
>
> From the reducer, the relevant code.
>
> // Prepare the output.
> IntWritable[] out = new IntWritable[5];
> // populate output array.
> ctx.write(key, new ArrayWritable(IntWritable.class, out));
> // If I comment the above line out, the job runs without issue.
>
> Can anyone see what I'm doing wrong?
> --
> Geoffry Roberts
>
>
--
Joseph Echeverria
Cloudera, Inc.
443.305.9434