mapreduce 2차 정렬
/**
* @ClassName IntPair
* @Description
* IntPair , WritableComparable , ,
* ,
* @date 2014 11 10 10:15:34
*
*/
public static class IntPair implements WritableComparable<IntPair> {
String first;
int second;
/**
* Set the left and right values.
*/
public void set(String left, int right) {
first = left;
second = right;
}
public String getFirst() {
return first;
}
public int getSecond() {
return second;
}
public int getFileName() {
return fileName;
}
public void setFileName(int fileName) {
this.fileName = fileName;
}
@Override
// , IntPair
public void readFields(DataInput in) throws IOException {
first = in.readUTF();
second = in.readInt();
fileName = in.readInt();
}
@Override
// , IntPair
public void write(DataOutput out) throws IOException {
out.writeUTF(first);
out.writeInt(second);
out.writeInt(fileName);
}
@Override
// key
public int compareTo(IntPair o) {
if (!first.equals(o.first)) {
return o.first.compareTo(first);
} else if (second != o.second) {
return second > o.second ? 1 : -1;
} else {
return 0;
}
}
@Override
public boolean equals(Object right) {
if (right == null)
return false;
if (this == right)
return true;
if (right instanceof IntPair) {
IntPair r = (IntPair) right;
return r.first.equals(first) && r.second == second;
} else {
return false;
}
}
}
첫 번째 정렬의 정상적인 정렬을 위해Partitioner와
/**
* 。 first Partition。
*/
public static class FirstPartitioner extends
Partitioner<IntPair, Text> {
@Override
public int getPartition(IntPair key, Text value, int numPartitions) {
return key.first.hashCode()%numPartitions;
}
}
/**
* 。 first 。
*/
// , WritableComparator
public static class GroupingComparator extends WritableComparator {
protected GroupingComparator() {
super(IntPair.class, true);
}
@SuppressWarnings("rawtypes")
@Override
// Compare two WritableComparables.
public int compare(WritableComparable w1, WritableComparable w2) {
IntPair ip1 = (IntPair) w1;
IntPair ip2 = (IntPair) w2;
String l = ip1.getFirst();
String r = ip2.getFirst();
return r.compareTo(l);
}
}
그리고main 함수의job에 추가
job.setMapOutputKeyClass(IntPair.class);
job.setGroupingComparatorClass(GroupingComparator.class);
job.setPartitionerClass(FirstPartitioner.class);
물론 맵과 Reduce의 키 대상도 IntPair로 설정해야 합니다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.