[HADOOP] 역순 정렬 감속기 키
HADOOP역순 정렬 감속기 키
지도 출력 키를 역순으로 감속기에 전달하는 가장 좋은 방법은 무엇입니까? 기본적으로 감속기는 키의 오름차순으로 모든 키를받습니다. 어떤 도움이나 의견도 감사합니다.
간단히 말해서, 일반적인 시나리오에서 맵이 키 1,4,3,5,2를 방출하면 감속기는 1,2,3,4,5를 수신합니다. 나는 감속기가 5,4,3,2,1을 대신 받길 원합니다.
해결법
-
==============================
1.Hadoop 1.X에서는 JobConf.setOutputKeyComparatorClass를 사용하여 출력용으로 사용자 정의 비교기 클래스를 지정할 수 있습니다.
Hadoop 1.X에서는 JobConf.setOutputKeyComparatorClass를 사용하여 출력용으로 사용자 정의 비교기 클래스를 지정할 수 있습니다.
Comparator는 RawComparator 인터페이스를 구현해야합니다.
Hadoop 2.X에서는 RawComparator 구현과 함께 Job.setSortComparatorClass를 사용하여이 작업을 수행합니다.
-
==============================
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.매퍼에서 키를 방출하기 전에 키를 -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 - 내림차순으로 정렬됩니다. 보다 복잡한 정렬에서는 비교할 사용자 정의 클래스를 작성한 다음 드라이버 클래스에 설정하는 것이 가장 좋습니다.
from https://stackoverflow.com/questions/11670953/reverse-sorting-reducer-keys by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 사육사 오류에 대한 Hbase 연결 (0) | 2019.07.14 |
---|---|
[HADOOP] spark-submit (클러스터 모드) 할 HDFS에있는 typesafe 구성 파일을 추가하는 방법은 무엇입니까? (0) | 2019.07.14 |
[HADOOP] 오류 : 140770FC : SSL 루틴 : SSL23_GET_SERVER_HELLO : 알 수없는 프로토콜 (0) | 2019.07.14 |
[HADOOP] hadoop 파일 시스템에서 Java 프로그램의 클래스 경로를 설정하는 방법 (0) | 2019.07.14 |
[HADOOP] 수 아파치 flume hdfs 싱크 동적 경로를 쓸 수 있습니까? (0) | 2019.07.14 |