복붙노트

[HADOOP] hadoop 스트리밍-파이썬을 사용하여 두 개의 diff 파일을 내부 결합하는 방법

HADOOP

hadoop 스트리밍-파이썬을 사용하여 두 개의 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. ==============================

    1.Hive 사용을 조사해야합니다. 이를 통해 필요한 것처럼 여러 소스 파일을 하나로 결합 할 수 있습니다. 거의 SQL에서와 같이 두 개의 데이터 소스를 결합한 다음 결과를 매퍼 및 리듀서로 푸시 할 수 있습니다.

    Hive 사용을 조사해야합니다. 이를 통해 필요한 것처럼 여러 소스 파일을 하나로 결합 할 수 있습니다. 거의 SQL에서와 같이 두 개의 데이터 소스를 결합한 다음 결과를 매퍼 및 리듀서로 푸시 할 수 있습니다.

  2. 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