package hip.ch6.joins.repartition.impl; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.hadoop.io.WritableComparable; import org.apache.hadoop.io.WritableComparator; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; public class CompositeKey implements WritableComparable<CompositeKey> { private String key = ""; private long order = 0; public CompositeKey() { } public CompositeKey(String key, long order) { this.key = key; this.order = order; } public String getKey() { return this.key; } public long getOrder() { return this.order; } public void setKey(String key) { this.key = key; } public void setOrder(long order) { this.order = order; } @Override public void readFields(DataInput in) throws IOException { this.key = in.readUTF(); this.order = in.readLong(); } @Override public void write(DataOutput out) throws IOException { out.writeUTF(key); out.writeLong(this.order); } @Override public int compareTo(CompositeKey other) { if (this.key.compareTo(other.key) != 0) { return this.key.compareTo(other.key); } else if (this.order != other.order) { return order < other.order ? -1 : 1; } else { return 0; } } public static class CompositeKeyComparator extends WritableComparator { public CompositeKeyComparator() { super(CompositeKey.class); } public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) { return compareBytes(b1, s1, l1, b2, s2, l2); } } @Override public String toString() { return ToStringBuilder.reflectionToString(this); } static { // register this comparator WritableComparator.define(CompositeKey.class, new CompositeKeyComparator()); } }