[HADOOP] 어떻게지도-감소 하둡의 데이터 세트의 이동 평균을 중심으로 계산하려면?
HADOOP어떻게지도-감소 하둡의 데이터 세트의 이동 평균을 중심으로 계산하려면?
나는 데이터 집합의 이동 평균을 중심으로 계산할.
예 입력 형식 :
quarter | sales
Q1'11 | 9
Q2'11 | 8
Q3'11 | 9
Q4'11 | 12
Q1'12 | 9
Q2'12 | 12
Q3'12 | 9
Q4'12 | 10
다음 수학적 표현과 데이터의 이동 평균을 계산하고, 평균 이동 중심
Period Value MA Centered
1 9
1.5
2 8
2.5 9.5
3 9 9.5
3.5 9.5
4 12 10.0
4.5 10.5
5 9 10.750
5.5 11.0
6 12
6.5
7 9
나는 일년 즉 네 분기의 매퍼 판매 가치를 제공 할 것입니다 RecordReader의 구현과 붙어있다. RecordReader 문제 질문 스레드 감사
해결법
-
==============================
1.이것은 실제로 맵리 듀스 패러다임에서 완전히 행할; 그것은 '슬라이딩 윈도우'로 생각 될 필요가 없습니다. 대신 각 데이터 포인트는 네 MA 계산의 최대 관련이 있다는 사실을 생각하고 map 함수를 호출 할 때마다 하나 이상의 키 - 값 쌍을 방출 할 수 있음을 기억하십시오. 여기에 의사 코드는 다음과 같습니다
이것은 실제로 맵리 듀스 패러다임에서 완전히 행할; 그것은 '슬라이딩 윈도우'로 생각 될 필요가 없습니다. 대신 각 데이터 포인트는 네 MA 계산의 최대 관련이 있다는 사실을 생각하고 map 함수를 호출 할 때마다 하나 이상의 키 - 값 쌍을 방출 할 수 있음을 기억하십시오. 여기에 의사 코드는 다음과 같습니다
First MR job: map(quarter, sales) emit(quarter - 1.5, sales) emit(quarter - 0.5, sales) emit(quarter + 0.5, sales) emit(quarter + 1.5, sales) reduce(quarter, list_of_sales) if (list_of_sales.length == 4): emit(quarter, average(list_of_sales)) endif Second MR job: map(quarter, MA) emit(quarter - 0.5, MA) emit(quarter + 0.5, MA) reduce(quarter, list_of_MA) if (list_of_MA.length == 2): emit(quarter, average(list_of_sales)) endif
-
==============================
2.나의 이해 이동 평균의 최고의에서 잘되지 않습니다 그 계산은 본질적으로 정렬 된 데이터를 통해 "슬라이딩 창"때문에 MR이 정렬 된 데이터의 비 교차 범위의 처리가되는 동안, 맵리 듀스 패러다임에 매핑됩니다. 내가 볼 않음 원인 및 해결 방법은 다음과 같습니다 : A)이 개 실행에 두 개의 서로 다른 파티션을 만들 수 있도록 사용자 정의 파티션 프로그램을 구현합니다. 각 실행에 당신의 감속기는 서로 다른 데이터 범위를 얻을 수 및 평균 곳 approprieate 이동 계산합니다 내가 설명하려고합니다 : 해야 감속기에 대한 첫 번째 실행 데이터에서 : R1 : Q1, Q2, Q3, Q4 R2 : Q5, Q6, Q7, Q8 ...
나의 이해 이동 평균의 최고의에서 잘되지 않습니다 그 계산은 본질적으로 정렬 된 데이터를 통해 "슬라이딩 창"때문에 MR이 정렬 된 데이터의 비 교차 범위의 처리가되는 동안, 맵리 듀스 패러다임에 매핑됩니다. 내가 볼 않음 원인 및 해결 방법은 다음과 같습니다 : A)이 개 실행에 두 개의 서로 다른 파티션을 만들 수 있도록 사용자 정의 파티션 프로그램을 구현합니다. 각 실행에 당신의 감속기는 서로 다른 데이터 범위를 얻을 수 및 평균 곳 approprieate 이동 계산합니다 내가 설명하려고합니다 : 해야 감속기에 대한 첫 번째 실행 데이터에서 : R1 : Q1, Q2, Q3, Q4 R2 : Q5, Q6, Q7, Q8 ...
여기에 일부 품질 평가 점수에 대한 이동 평균 계산합니다.
다음 실행에 감속기 데이터를 같은 얻어야한다 : R1 : Q1 ... Q6 R2 : Q6 ... Q10 R3 : Q10..Q14
이동 평균의 나머지를 계산합니다. 그럼 당신은 집계 결과를해야합니다.
동일한 범위로하지만, 일부 시프트 나누어 각 시간 -이 두 가지 동작 모드를 정의한다 분할기 아이디어. 의사 코드에서이 같이 표시됩니다 : 파티션 = (+ 키의 SHIFT) / (MAX_KEY / numOfPartitions); 어디: SHIFT는 구성에서 이동합니다. MAX_KEY = 키의 최대 값. 나는 그들이 0으로 시작 편의상 가정합니다.
이 특정 분할 제한되며 분할의 경계에 걸쳐 밀어 수 없기 때문에 RecordReader는 이럴는 해결책이 아니다.
또 다른 해결책은 분할 입력 데이터 (는 InputFormat의 일부)의 사용자 로직을 구현하는 것이다. 분할과 유사한 2 개 개의 다른 슬라이드를 수행하기 위해 수행 할 수 있습니다.
from https://stackoverflow.com/questions/12455088/how-to-calculate-centered-moving-average-of-a-set-of-data-in-hadoop-map-reduce by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 돼지 초보자의 예 [예기치 않은 오류] (0) | 2019.10.08 |
---|---|
[HADOOP] 작업을 줄일지도 실행 코드의 클래스 패스에 항아리를 추가 (0) | 2019.10.08 |
[HADOOP] 하이브에서 데이터 세트를 가져 오기 오류 (0) | 2019.10.08 |
[HADOOP] 하둡에 입력이 주요 관련하여 완성 기능을 줄일 수 있습니까? (0) | 2019.10.08 |
[HADOOP] 고정 표시기 이미지는 하둡을 사용할 수 있습니까? (0) | 2019.10.08 |