2012-07-18 1 views
0

사용자, 회사 및 방문이라는 세 가지 기본 모델이 있다고 가정 해 보겠습니다. 사용자가 회사에 갈 때마다 방문은 (user_id, company_id, visit_date) 형식으로 기록됩니다.분석 계산을 위해 MapReduce 또는 다른 분산 계산 방법을 사용합니까?

회사의 평균 방문 시간을 계산할 수 있기를 원합니다. 전반적인 방문은 아니지만 매장으로 돌아 오기 전에 평균적으로 고객이 기다리는 기간을 구체적으로 설명합니다.

예를 들어 한 사용자가 화요일, 수요일, 금요일에 방문하면 1 일의 "간격"과 2 일의 "간격"=> (1, 2)이 표시됩니다. 다른 사용자가 월요일과 금요일에 방문하면 4 일 => (4)의 간격이 제공됩니다. 세 번째 사용자가 한 번만 방문한 경우 고려하지 않아야합니다. 회사에서 사용자를 방문하는 평균 시간은 (1 + 2 + 4)/3 = 2.333 일입니다.

수천 명의 사용자, 도청 및 회사가 있고 각 회사에 대해 하나의 숫자를 계산하려면 어떻게해야합니까? 이전에 기본 MapReduce 응용 프로그램을 수행 한 적이 있었으며이를 수행하기 위해 내지도 및 축소 단계가 무엇인지 파악할 수 없습니다. 아무도 의사 코드에서 MapReduce를 찾아 낼 수 있습니까? 아니면 합리적으로 수행 할 수있는 분산 계산의 다른 방법이 있습니까? 기록을 위해 매일 밤 데이터베이스에서이 작업을 수행하고 싶습니다.

답변

0

지나치게 단순한 접근 방식은 두 가지 작업 단계를 갖는 것입니다.

첫 번째 작업 단계에는 키 값을 "company : user"및 "visit_date"형식으로 작성하는 매퍼가 있습니다.

"user1:companyA" -> "2012/07/16" 
"user1:comapnyA" -> "2012/07/17" 
"user1:comapnyA" -> "2012/07/19" 
"user2:comapnyA" -> "2012/07/15" 
"user2:comapnyA" -> "2012/07/19" 
... 

이 감속기 호출 할 때마다 하나의 회사에 하나의 사용자가 방문을 모두 통과한다는 것을 의미 : 같은 위의 예에서 매퍼 뭔가를 작성합니다. 이고 I는 (반복 가능 값으로 전달) 날짜의 집합을 가정하고있어

"user2:companyA" -> {2012/07/15, 2012/07/19} 

:

"user1:companyA" -> {2012/07/16, 2012/07/17, 2012/07/19} 

및 다른 호출 전달한다 : 즉, 감속 한 호출이 전달된다는 것을 의미 간격을 계산하고 각 갭에 대한 기록을 "회사"및 "갭"양식의 키 값 쌍으로 작성하십시오. 예를 들어, 전달 :

"user1:companyA" -> {2012/07/16, 2012/07/17, 2012/07/19} 

첫 번째 작업의 감속기는 컨텍스트에 기록됩니다

"companyA" -> 1 
"compnayA" -> 2 

두 번째 작업은 단지에 회사/갭 정보를 전달하는 통과 매퍼있다 감속기. 감속기에 대한 각각의 호출은 특정 회사에 대한 갭의 반복 가능한 값을 제공합니다. 데이터를 반복하여 평균을 산출하고 "company"및 "average_gap"형식으로 키 값 쌍을 작성하십시오.

방문수가 너무 많아지면 사용자 지정 비교기를 사용하여 hadoop에서 정렬 작업을 수행하는 방법에 대해 이야기 할 수 있습니다.

+0

나는 "갭"으로 무엇을하고 있는지에 대해 조금 혼란 스럽습니까, 당신은 정교 할 수 있습니까? –

+0

간격은 사용자가 정의한대로입니다. 사용자가 회사를 2 회 연속 방문하는 시간의 차이입니다. 대답을 좀 더 편집하겠습니다. –