java.lang.ClassCastException: class com.atguigu.reducer.groupomparator.OrderBean
at java.base/java.lang.Class.asSubclass(Class.java:3769)
at org.apache.hadoop.mapred.JobConf.getOutputKeyComparator(JobConf.java:887)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.init(MapTask.java:1004)
at org.apache.hadoop.mapred.MapTask.createSortingCollector(MapTask.java:402)
at org.apache.hadoop.mapred.MapTask.access$100(MapTask.java:81)
at org.apache.hadoop.mapred.MapTask$NewOutputCollector.<init>(MapTask.java:698)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:770)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:243)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
at java.base/java.lang.Thread.run(Thread.java:832)
解决方法:
bean类要实现WritableComparable接口 ,重写
// 序列化
@Override
public void write(DataOutput out) throws IOException {
out.writeInt(orderId);
out.writeDouble(orderMoney);
}
// 反序列化
@Override
public void readFields(DataInput in) throws IOException {
orderId = in.readInt();
orderMoney = in.readDouble();
}
@Override
public int compareTo(OrderBean orderBean) {
int result = 0;
if(orderId > orderBean.getOrderId()) {
result = 1;
}else if(orderId < orderBean.getOrderId()) {
result = -1;
}else {
if(orderMoney > orderBean.getOrderMoney()) {
result = -1;
}else {
result = 1;
}
}
return result;
}