[HADOOP] 단지 중복을 방출하는 감속기를 얻는 방법
HADOOP단지 중복을 방출하는 감속기를 얻는 방법
나는 모든 걸쳐 두 번 이상 발견 된 모든 ID의 목록을 얻으려면 1의 값 키로 ID 번호를 내가 맵리 듀스 작업으로 달성하기 위해 희망하는 것은 많은 데이터를 통과하고 발광하는 매퍼가 중복 된 ID의 목록입니다 데이터. 예를 들면 :
매퍼 방출 : ABC 1 EFG 1 그들은 일을했다 ABC 1 DHH 1
이 경우 ID 'ABC'가 매퍼에 의해 한 번 이상 방출 된 것을 볼 수 있습니다.
그것은 단지 중복을 방출 할 수 있도록하는 방법이 감속기를 수정합니까? 1보다 큰 값을 갖는, 즉 키 :
import sys
import codecs
sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
inData = codecs.getreader('utf-8')(sys.stdin)
(last_key, tot_cnt) = (None, 0)
for line in inData:
(key, val) = line.strip().split("\t")
if last_key and last_key != key:
sys.stdout.write("%s\t%s\n" % (last_key,tot_cnt))
(last_key, tot_cnt) = (key, int(val))
else:
(last_key, tot_cnt) = (key, tot_cnt + int(val))
if last_key:
sys.stdout.write("%s\t%s\n" % (last_key, tot_cnt))
해결법
-
==============================
1.당신은 몇 곳에서 실수를 범했다.
당신은 몇 곳에서 실수를 범했다.
나를 위해 작동 수정 된 코드는 다음과 같은 :
import sys import codecs sys.stdout = codecs.getwriter('utf-8')(sys.stdout) inData = codecs.getreader('utf-8')(sys.stdin) (last_key, tot_cnt) = (None, 0) for line in inData: (key, val) = line.strip().split("\t") if last_key != key: if(tot_cnt > 1): sys.stdout.write("%s\t%s\n" % (last_key, tot_cnt)) (last_key, tot_cnt) = (key, int(val)) else: (last_key, tot_cnt) = (key, tot_cnt + int(val)) if last_key and tot_cnt > 1: sys.stdout.write("%s\t%s\n" % (last_key, tot_cnt))
나는 당신의 데이터 출력을 다음 얻을 :
abc 2
from https://stackoverflow.com/questions/34233451/how-to-get-the-reducer-to-emit-only-duplicates by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 분산 시스템에 노드의 추가의 데이터 부문 (0) | 2019.10.11 |
---|---|
[HADOOP] 수로는 - 계층화 데이터 브로 소스 및 싱크 [폐쇄]를 사용하여 흐르는 (0) | 2019.10.11 |
[HADOOP] Kerberos는 : 합계 실패 문제를 확인 (0) | 2019.10.11 |
[HADOOP] MRUnit와 브로가있는 InstantiationException을 제공합니다 (0) | 2019.10.11 |
[HADOOP] 읽기 / Windows 서버에서 HDFS에 파일을 작성 (0) | 2019.10.11 |