[HADOOP] Hadoop MapRed를 사용하여 순서 정렬
HADOOPHadoop MapRed를 사용하여 순서 정렬
잘,
축소 작업 후에 간단한 WordCount 프로그램의 정렬 순서를 어떻게 변경할 수 있는지 알고 싶습니다. 이미 키 대신 값별로 순서대로 다른 맵을 만들었지 만 여전히 오름차순으로 정렬되었습니다. 이 작업을 수행하는 쉬운 간단한 방법이 있습니까 (정렬 순서 변경) ?!
감사합니다 벨로 조
해결법
-
==============================
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.이것은 위와 거의 동일하며 조금 더 단순 해 보입니다.
이것은 위와 거의 동일하며 조금 더 단순 해 보입니다.
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;
사용에 따라 위의 텍스트 유형을 변경할 수 있습니다.
from https://stackoverflow.com/questions/9493644/sort-order-with-hadoop-mapred by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] TableMapper를 사용할 때 HBase Mapreduce 종속성 문제 (0) | 2019.08.08 |
---|---|
[HADOOP] hadoop mapreduce의 출력을 압축하는 가장 효율적인 방법 (0) | 2019.08.08 |
[HADOOP] Hadoop-Reducer가 매퍼 입력을 기다리고 있습니까? (0) | 2019.08.08 |
[HADOOP] Docker 컨테이너의 Hadoop이 더 빠르거나 가치가 있습니까? [닫은] (0) | 2019.08.08 |
[HADOOP] RDD는 첫 번째 열 값만 갖습니다. Hbase, PySpark (0) | 2019.08.08 |