Hadoop의 Comparator 원리
8501 단어 comparator
1. Writable Comparator는 주로 두 가지 기능을 제공합니다.
1 public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
2
3 try {
4
5 buffer.reset(b1, s1, l1); // parse key1
6
7 key1.readFields(buffer);
8
9
10
11 buffer.reset(b2, s2, l2); // parse key2
12
13 key2.readFields(buffer);
14
15
16
17 } catch (IOException e) {
18
19 throw new RuntimeException(e);
20
21 }
22
23
24
25 return compare(key1, key2); // compare them
26
27 }
대응하는 기초 데이터 유형의compare()의 실현은 특정 유형의 범위화를 교묘하게 이용했다. (writable Comparable의compareTo 방법을 이용했다)
1 public int compare(WritableComparable a, WritableComparable b) {
2
3 return a.compareTo(b);
4
5 }
Writable Comparator에서private static HashMap
RawComparator<IntWritable> writable = WritableComparator.get(IntWritable.class);
2. Writable Comparator에서 사용자 정의 Writable을 등록하는 방법
Writable Comparator 클래스에 define 방법이 있습니다. 이 방법을 통해 Writable를 Writable Comparator에 등록하여 get 방법을 통해 실례를 직접 얻을 수 있습니다!
1 public static synchronized void define(Class c,WritableComparator comparator) {
2 comparators.put(c, comparator);
3 }
3. BooleanWritable에 내장된 Comparator의 실현
Writable Comparable의 여러 가지 실례, 예를 들어 IntWritable 실례: 내부 클래스인 Comparator 클래스는 자신의 IntWritable 유형에 따라 Writable Comparator 안의 compare () 방법을 다시 불러와야 한다. Writable Comparator 안의 compare () 방법은 부족한 실현을 제공할 뿐이고 진정한 compare () 방법은 자신의 유형인 IntWritable에 따라 다시 불러와야 한다.그래서 Writable Comparator 방법의 readInt.등 방법은 밑바닥의 봉인을 실현하는 것일 뿐 내부 Comparator에서 호출하기 편리할 뿐이다.
BooleanWritable 클래스에 내장된 RawCompartor
1 **
2 * A Comparator optimized for BooleanWritable.
3 */
4 public static class Comparator extends WritableComparator {
5 public Comparator() {// Constructor keyClass=BooleanWrite.class
6 super(BooleanWritable.class);
7 }
8 // ,
9 public int compare(byte[] b1, int s1, int l1,
10 byte[] b2, int s2, int l2) {
11 boolean a = (readInt(b1, s1) == 1) ? true : false;
12 boolean b = (readInt(b2, s2) == 1) ? true : false;
13 return ((a == b) ? 0 : (a == false) ? -1 : 1);
14 }
15 }
16 //
17 static {
18 WritableComparator.define(BooleanWritable.class, new Comparator());
19 }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
컬렉션 프레임워크와 셋(Set)HashSet<E> TreeSet<E> 중복 불가 순서 유지 불가 equals Object 클래스의 equals 메소드 호출 결과를 근거로 동일 인스턴스를 판단 hashCode set의 해쉬 코드를 반환 Set에서의...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.