Hi, I have a following issue in Hadoop 0.20.2. When i try to use inheritance with WritableComparables the job is failing. Example If i create a base writable called as shape
public abstract class ShapeWritable<T> implements WritableComparable<T> { } Then extend this for a concrete class called CircleWritable . Now if my mapper output is set as ShapeWritable in job configuration and I write a CircleWriable in collect.write() , the map fails with class mismatch. When i looked into source code of MapTask.java , i saw the following code *public** **synchronized** **void* collect(K key, V value,* **int* partition )* **throws* IOException { reporter.progress(); * **if* (key.getClass() != keyClass) { * **throw** **new* IOException("Type mismatch in key from map: expected " + keyClass.getName() + ", recieved " + key.getClass().getName()); } * **if* (value.getClass() != valClass) { * **throw** **new* IOException("Type mismatch in value from map: expected " + valClass.getName() + ", recieved " + value.getClass().getName()); } Here , we are matching directly classes which means inheritance don't work. Can anyone tell why its implemented in this way? Is it changed in newer version of Hadoop? -- Join me at http://hadoopworkshop.eventbrite.com/