2017-05-10 3 views
0

내 프로젝트는식이 습관에 관한 많은 데이터를 얻고 MapReduce (두 가지 MapReduces 사용 계획)를 사용하여 상위 5 개 식품이 주어진 느낌과 어떤 관련이 있는지 알아 보는 것입니다. 다음은 샘플 입력 파일이다MapReduce에서 전체 파일 읽기

food parsnips 2017/1/24 7:00 
food beef 2017/1/24 9:00 
food oats 2017/1/24 12:00 
feel sleepy 2017/1/24 16:00 
food pineapple 2017/1/24 17:00 
food squid 2017/1/25 7:00 
feel sleepy 2017/1/25 11:00 
food blueberries 2017/1/25 12:00 
food plums 2017/1/25 14:00 
feel headache 2017/1/25 18:00 
food broccoli 2017/1/25 19:00 
food strawberries 2017/1/26 6:00 
feel tired 2017/1/26 6:00 
food oats 2017/1/26 7:00 
food celery 2017/1/26 8:00 
food lobster 2017/1/26 9:00 
food wings 2017/1/26 9:00 
feel stomachache 2017/1/26 14:00 
food fish 2017/1/26 16:00 
food rice 2017/1/27 6:00 
food barley 2017/1/27 11:00 
food wings 2017/1/27 17:00 
feel itchy 2017/1/27 18:00 
food mustard 2017/1/27 19:00 
food icecream 2017/1/28 6:00 
feel sleepy 2017/1/28 6:00 
food oats 2017/1/28 10:00 
feel stomachache 2017/1/28 10:00 
food grapes 2017/1/28 13:00 
food cheese 2017/1/28 14:00 
food bread 2017/1/28 15:00 
feel itchy 2017/1/28 17:00 

소정의 식품은 식품을 먹은 후 십이시간에 감까지와 관련 될 것이다. 예를 들어, 첫 번째 줄에는 파스 닙이 먹은 후 9 시간 후에 수면 감이 발생하기 때문에 파스 닙은 그와 관련된 느낌으로 "졸린"증상을 나타냅니다. 그 '졸린'이 18:00에 발생했다면 파닉스는 졸음과 관련이 없습니다. 이 파일과 같은 많은 입력 파일이 있습니다. "음식, 느낌"

  1. 첫 번째 맵리 듀스는 파일에 읽기 및 키입니다 (키, 값) 쌍을 생성하고 값이 단순히 :

    이 프로젝트에 대한 내 계획입니다 "하나." 다른 말로 표현하면 음식이 어떤 느낌과 관련이있을 때만 열쇠가 ​​나오는 쌍을 만듭니다. 그런 다음 감추기는 단어 수처럼 주어진 모든 "음식, 감정"이 모든 입력에 걸쳐 발생하는 모든 시간을 합산합니다.

  2. 두 번째 MapReduce는 (음식, 느낌, 합계)를 (키, 값) 쌍으로 취합니다. 그러면 각 감정을 원인이되는 모든 음식과 매핑하여 "감정, 음식", x 번 (핵심 가치)을 얻게됩니다. ": 사건을 X food1 feeling1"

: 그런 다음 다음과 같은 출력 결과, 인과 관계에 대한 출력으로 느낌의 5 대 음식을 감소시킬 것이다 "feeling1 : food2, 사건을 X"

제 문제는 첫 번째 MapReduce 기능을 설정하는 방법을 모르겠다는 것입니다. 필자는 MapReduce에 대한 많은 문헌을 읽었으며 일반적인 MaxTemp 및 WordCount 예제에 익숙해졌지만 문제는 12 시간짜리 창을 사용하는 방법과 입력 파일을 사용하여 "음식"을 만드는 방법을 모르는 것입니다. - 느낌, 1 "키 - 값 쌍. 어떤 제안이 유용 할 것입니다. 필자는지도 함수가 개별 파일의 값이 아닌 전체 파일 텍스트를 가져 오는 것과 관련이 있다는 것을 알고 있습니다.

감사

답변

0

직선 전달 방법은 here에서 예를 얻을 수 있습니다 자신의 InputFormat을 구현하는 것입니다.

다른 방법은 하나의 개별 MapReduce 프로그램을 구현하여 전체 데이터를 사전 처리하는 것입니다. 예 : 매퍼에 처리 할 줄 수를 한 줄로 처리하십시오. 당신이 매퍼에 의해 5 개 라인을 처리한다고 가정 다음이 비슷한이

food parsnips 2017/1/24 7:00 
food beef 2017/1/24 9:00 
food oats 2017/1/24 12:00 
feel sleepy 2017/1/24 16:00 
food pineapple 2017/1/24 17:00 

을 수행하는 매퍼 라인을 분리하고이를 처리 할

food parsnips 2017/1/24 7:00 | food beef 2017/1/24 9:00 | food oats 2017/1/24 12:00 | feel sleepy 2017/1/24 16:00 | food pineapple 2017/1/24 17:00 

후.

두 번째 방법은 상당히 비효율적입니다.

관련 문제