복붙노트

[HADOOP] Hadoop MapRed를 사용하여 순서 정렬

HADOOP

Hadoop MapRed를 사용하여 순서 정렬

잘,

축소 작업 후에 간단한 WordCount 프로그램의 정렬 순서를 어떻게 변경할 수 있는지 알고 싶습니다. 이미 키 대신 값별로 순서대로 다른 맵을 만들었지 만 여전히 오름차순으로 정렬되었습니다. 이 작업을 수행하는 쉬운 간단한 방법이 있습니까 (정렬 순서 변경) ?!

감사합니다 벨로 조

해결법

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

    1.이전 API (매핑 된 *)를 사용하는 경우 작업 conf에서 OutputKeyComparatorClass를 설정하십시오.

    이전 API (매핑 된 *)를 사용하는 경우 작업 conf에서 OutputKeyComparatorClass를 설정하십시오.

    jobConf.setOutputKeyComparatorClass(ReverseComparator.class);
    

    ReverseComparator는 다음과 같습니다.

    static class ReverseComparator extends WritableComparator {
            private static final Text.Comparator TEXT_COMPARATOR = new Text.Comparator();
    
            public ReverseComparator() {
                super(Text.class);
            }
    
            @Override
            public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
                try {
                    return (-1)* TEXT_COMPARATOR
                            .compare(b1, s1, l1, b2, s2, l2);
                } catch (IOException e) {
                    throw new IllegalArgumentException(e);
                }
            }
    
            @Override
            public int compare(WritableComparable a, WritableComparable b) {
                if (a instanceof Text && b instanceof Text) {
                    return (-1)*(((Text) a)
                            .compareTo((Text) b)));
                }
                return super.compare(a, b);
            }
        }
    

    새 API (mapreduce. *)에서는 Job.setSortComparator () 메서드를 사용해야한다고 생각합니다.

  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. from https://stackoverflow.com/questions/9493644/sort-order-with-hadoop-mapred by cc-by-sa and MIT license