복붙노트

[HADOOP] 역순 정렬 감속기 키

HADOOP

역순 정렬 감속기 키

지도 출력 키를 역순으로 감속기에 전달하는 가장 좋은 방법은 무엇입니까? 기본적으로 감속기는 키의 오름차순으로 모든 키를받습니다. 어떤 도움이나 의견도 감사합니다.

간단히 말해서, 일반적인 시나리오에서 맵이 키 1,4,3,5,2를 방출하면 감속기는 1,2,3,4,5를 수신합니다. 나는 감속기가 5,4,3,2,1을 대신 받길 원합니다.

해결법

  1. ==============================

    1.Hadoop 1.X에서는 JobConf.setOutputKeyComparatorClass를 사용하여 출력용으로 사용자 정의 비교기 클래스를 지정할 수 있습니다.

    Hadoop 1.X에서는 JobConf.setOutputKeyComparatorClass를 사용하여 출력용으로 사용자 정의 비교기 클래스를 지정할 수 있습니다.

    Comparator는 RawComparator 인터페이스를 구현해야합니다.

    Hadoop 2.X에서는 RawComparator 구현과 함께 Job.setSortComparatorClass를 사용하여이 작업을 수행합니다.

  2. ==============================

    2.샘플, 간단한 코드

    샘플, 간단한 코드

    class MyKeyComparator extends WritableComparator {
        protected DescendingKeyComparator() {
            super(Text.class, true);
        }
    
        @SuppressWarnings("rawtypes")
        @Override
        public int compare(WritableComparable w1, WritableComparable w2) {
            Text key1 = (Text) w1;
            Text key2 = (Text) w2;          
            return -1 * key1.compareTo(key2);
        }
    }
    

    그런 다음 작업에 추가하십시오.

    job.setSortComparatorClass(MyKeyComparator.class);
    

    당신은 귀하의 용도에 따라 아래의 텍스트 유형을 변경할 수 있습니다.

    Text key1 = (Text) w1;
    Text key2 = (Text) w2; 
    
  3. ==============================

    3.매퍼에서 키를 방출하기 전에 키를 -1로 곱할 수 있습니다. 이로 인해 프레임 워크는 오름차순으로 정렬하지만 음수는 -5, -4, -3, -2, -1로 정렬되고 감속기에는 다시 -1이 곱해 져서 5,4,3,2,1이됩니다. . 이렇게하면 프레임 워크가 sudo - 내림차순으로 정렬됩니다. 보다 복잡한 정렬에서는 비교할 사용자 정의 클래스를 작성한 다음 드라이버 클래스에 설정하는 것이 가장 좋습니다.

    매퍼에서 키를 방출하기 전에 키를 -1로 곱할 수 있습니다. 이로 인해 프레임 워크는 오름차순으로 정렬하지만 음수는 -5, -4, -3, -2, -1로 정렬되고 감속기에는 다시 -1이 곱해 져서 5,4,3,2,1이됩니다. . 이렇게하면 프레임 워크가 sudo - 내림차순으로 정렬됩니다. 보다 복잡한 정렬에서는 비교할 사용자 정의 클래스를 작성한 다음 드라이버 클래스에 설정하는 것이 가장 좋습니다.

  4. from https://stackoverflow.com/questions/11670953/reverse-sorting-reducer-keys by cc-by-sa and MIT license