hadoop-mr运行报错记录

  • Post author:
  • Post category:其他


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;

}



版权声明:本文为Cheng_May原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。