Hello,
I am trying to write my very first MapReduce code. When I try to run the
jar, I get this error:
11/10/15 17:17:30 INFO mapred.JobClient: Task Id :
attempt_201110151636_0003_m_000001_2, Status : FAILED
java.lang.ClassCastException: class edu.bing.vfi5.KeyList
at java.lang.Class.asSubclass(Class.java:3018)
at org.apache.hadoop.mapred.JobConf.getOutputKeyComparator(JobConf.java:599)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.<init>(MapTask.java:791)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:350)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:307)
at org.apache.hadoop.mapred.Child.main(Child.java:170)
I assume this means that it has something to do with my implementation of
comparable. KeyList is a class for a 3-tuple key. The code is listed
below. Any hints would be greatly appreciated as I am trying to understand
how comparable is supposed to work. Also, do I need to implement Writable
as well? If so, should this be code for how the output is written to a file
in HDFS?
Thanks,
Keith
package edu.bing.vfi5;
public class KeyList implements Comparable<KeyList> {
private int[] keys;
public KeyList(int i, int j, int k) {
keys = new int[3];
keys[0] = i;
keys[0] = j;
keys[0] = k;
}
@Override
public int compareTo(KeyList k) {
// TODO Auto-generated method stub
if(this.keys[0] == k.keys[0] && this.keys[1] == k.keys[1] && this.keys[2] ==
k.keys[2])
return 0;
else if((this.keys[0]>k.keys[0])
||(this.keys[0]==k.keys[0]&&this.keys[1]>k.keys[1])
||(this.keys[0]==k.keys[0]&&this.keys[1]==k.keys[1]&&this.keys[2]>k.keys[2]))
return 1;
else
return -1;
}
}