自定义MapReduce的类型
package org.apache.hadoop.mapreduce.io; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import org.apache.hadoop.io.WritableComparable; /*** * customize writable eg.order * * @author nele * */ public class OrderWritable implements WritableComparable<OrderWritable> { private String orderId; private float price; public OrderWritable() { } public OrderWritable(String orderId, float price) { set(orderId, price); } public void set(String orderId, float price) { this.orderId = orderId; this.price = price; } public String getOrderId() { return orderId; } public void setOrderId(String orderId) { this.orderId = orderId; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; } public void write(DataOutput out) throws IOException { out.writeUTF(orderId); out.writeFloat(price); } public void readFields(DataInput in) throws IOException { this.orderId = in.readUTF(); this.price = in.readFloat(); } public int compareTo(OrderWritable o) { int comp = this.orderId.compareTo(o.orderId); if (comp == 0) { return Float.valueOf(this.price).compareTo(Float.valueOf(o.price)); } return comp; } @Override public String toString() { return orderId + "\t" + price; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((orderId == null) ? 0 : orderId.hashCode()); result = prime * result + Float.floatToIntBits(price); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; OrderWritable other = (OrderWritable) obj; if (orderId == null) { if (other.orderId != null) return false; } else if (!orderId.equals(other.orderId)) return false; if (Float.floatToIntBits(price) != Float.floatToIntBits(other.price)) return false; return true; } }
这样就可以,在mapreduce中使用。
需要根据具体的情境具体的设计。