java.io.IOException:Typemismatch in key from map:expected org.apache.hadoop.io
1774 단어 exception
해결 방법:
job.setMapOutputKeyClass(IntWritable.class);
job.setMapOutputValueClass(Text.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
if (key.getClass() != keyClass) { thrownew IOException("Type mismatch in key from map: expected " + keyClass.getName() + ", recieved " + key.getClass().getName()); } if(value.getClass() != valClass) { thrownew IOException("Type mismatch in value from map: expected " + valClass.getName() + ", recieved " + value.getClass().getName()); }
MapOutputBuffer에서collet () 은 MapOutputBuffer에서 지정한 KeyClass와 ValueClass를 초기화하는 것과 같은 실제 키 값 유형을 검사합니다.
keyClass= (Class<K>)job.getMapOutputKeyClass();
valClass =(Class<V>)job.getMapOutputValueClass();
public Class<?> getOutputKeyClass() { return getClass("mapred.output.key.class", LongWritable.class, Object.class); LongWritable } public Class<?> getOutputKeyClass() { return getClass("mapred.output.key.class", LongWritable.class, Object.class); LongWritable } 상술한 것은 프로그램에서 직접 수정하고, 명령줄에서 키와value를 지정하는 형식도 있습니다.
-D mapred.mapoutput.key.class=org.apache.hadoop.io.LongWritable -jobconf mapred.mapoutput.key.class=org.apache.hadoop.io.LongWritable