[HADOOP] hadoop 스트리밍-파이썬을 사용하여 두 개의 diff 파일을 내부 결합하는 방법
HADOOPhadoop 스트리밍-파이썬을 사용하여 두 개의 diff 파일을 내부 결합하는 방법
18 세에서 25 세 사이의 사용자 연령 그룹을 기준으로 인기 웹 사이트 페이지 방문을 찾고 싶습니다. 두 개의 파일이 있습니다. 하나는 사용자 이름, 나이를 포함하고 다른 파일은 사용자 이름, 웹 사이트 이름을 포함합니다. 예 :
users.txt
pages.txt
파이썬으로 다음을 작성했으며 hadoop 외부에서 예상대로 작동합니다.
import os
os.chdir("/home/pythonlab")
#Top sites visited by users aged 18 to 25
#read the users file
lines = open("users.txt")
users = [ line.split(",") for line in lines] #user name, age (eg - john, 22)
userlist = [ (u[0],int(u[1])) for u in users] #split the user name and age
#read the page visit file
pages = open("pages.txt")
page = [p.split(",") for p in pages] #user name, website visited (eg - john,google.com)
pagelist = [ (p[0],p[1]) for p in page]
#map user and page visits & filter age group between 18 and 25
usrpage = [[p[1],u[0]] for u in userlist for p in pagelist if (u[0] == p[0] and u[1]>=18 and u[1]<=25) ]
for z in usrpage:
print(z[0].strip('\r\n')+",1") #print website name, 1
샘플 출력 :
이제 hadoop 스트리밍을 사용 하여이 문제를 해결하고 싶습니다.
내 질문은 내 매퍼 에서이 두 개의 명명 된 파일 (users.txt, pages.txt)을 어떻게 처리합니까? 일반적으로 입력 디렉토리 만 하둡 스트리밍으로 전달합니다.
해결법
-
==============================
1.Hive 사용을 조사해야합니다. 이를 통해 필요한 것처럼 여러 소스 파일을 하나로 결합 할 수 있습니다. 거의 SQL에서와 같이 두 개의 데이터 소스를 결합한 다음 결과를 매퍼 및 리듀서로 푸시 할 수 있습니다.
Hive 사용을 조사해야합니다. 이를 통해 필요한 것처럼 여러 소스 파일을 하나로 결합 할 수 있습니다. 거의 SQL에서와 같이 두 개의 데이터 소스를 결합한 다음 결과를 매퍼 및 리듀서로 푸시 할 수 있습니다.
from https://stackoverflow.com/questions/16909577/hadoop-streaming-how-to-inner-join-of-two-diff-files-using-python by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 파일 형식이 사용자 정의 형식 인 경우 Hadoop MultipleOutputs가 여러 파일에 쓰지 않습니다 (0) | 2019.08.15 |
---|---|
[HADOOP] OpenJDK 클라이언트 VM-메모리를 할당 할 수 없습니다 (0) | 2019.08.14 |
[HADOOP] Java 클래스 파일의 Hadoop Streaming -file 옵션 관련 문제점 (0) | 2019.08.14 |
[HADOOP] 하이브에서 열 유형 변경 (0) | 2019.08.14 |
[HADOOP] Spark의 Hive 쿼리에 대한 HIVE_STATS_JDBC_TIMEOUT (0) | 2019.08.14 |