[HADOOP] Mapreduce / Hadoop의 두 가지 데이터 세트 조인
HADOOPMapreduce / Hadoop의 두 가지 데이터 세트 조인
Hadoop의 두 데이터 세트간에 Natural-Join 연산을 구현하는 방법을 아는 사람이 있습니까?
더 구체적으로, 내가 정확히해야 할 일은 다음과 같다.
나는 두 세트의 데이터를 가지고있다.
보시다시피 tile_numbers는 두 데이터 세트간에 동일합니다. 이제 실제로 필요한 것은 각 tile_number를 기반으로이 두 데이터 세트를 결합하는 것입니다. 즉, 모든 tile_number에 대해 우리는 n point_id : point_info와 m line_id : line_info를가집니다. 내가하고 싶은 일은 모든 쌍의 point_id : point_info를 모든 line_id : line_info의 모든 쌍과 결합시키는 것입니다.
명확히하기 위해 다음 예를 참조하십시오.
포인트 쌍 :
(tile0, point0)
(tile0, point1)
(tile1, point1)
(tile1, point2)
라인 쌍 :
(tile0, line0)
(tile0, line1)
(tile1, line2)
(tile1, line3)
내가 원하는 것은 다음과 같다.
타일 0 :
(tile0, point0:line0)
(tile0, point0:line1)
(tile0, point1:line0)
(tile0, point1:line1)
타일 1 :
(tile1, point1:line2)
(tile1, point1:line3)
(tile1, point2:line2)
(tile1, point2:line3)
해결법
-
==============================
1.제목을 키 및 점 / 선을 값으로 출력하는 매퍼를 값으로 사용하십시오. 포인트 출력 값과 라인 출력 값을 구별해야합니다. 예를 들어 특수 문자를 사용할 수 있습니다 (바이너리 방식이 훨씬 우수 할지라도).
제목을 키 및 점 / 선을 값으로 출력하는 매퍼를 값으로 사용하십시오. 포인트 출력 값과 라인 출력 값을 구별해야합니다. 예를 들어 특수 문자를 사용할 수 있습니다 (바이너리 방식이 훨씬 우수 할지라도).
따라서 맵 출력은 다음과 같습니다.
tile0, _point0 tile1, _point0 tile2, _point1 ... tileX, *lineL tileY, *lineK ...
그런 다음 감속기에서 입력 내용의 구조는 다음과 같습니다.
tileX, [*lineK, ... , _pointP, ...., *lineM, ..., _pointR]
값을 가지고 점과 선을 분리하고, 십자가를 만들고, 십자가의 각 쌍을 다음과 같이 출력해야합니다.
tileX (lineK, pointP) tileX (lineK, pointR) ...
이미 응용 프로그램 사양에 따라 포인트 값과 라인 값을 쉽게 구별 할 수있는 경우 특수 문자 (*, _)가 필요하지 않습니다.
감속기에서 수행해야하는 교차 제품 관련 : 먼저 전체 값 목록을 반복하여 2 개의 목록으로 분리합니다.
List<String> points; List<String> lines;
그런 다음 두 개의 중첩 된 for 루프를 사용하여 교차 제품을 수행하십시오. 그런 다음 결과 목록과 각 요소 출력에 대해 반복합니다.
tile(current key), element_of_the_resulting_cross_product_list
-
==============================
2.기본적으로 여기에는 두 가지 옵션이 있습니다. 측면 조인을 줄이거 나지도 측 조인을 줄입니다.
기본적으로 여기에는 두 가지 옵션이 있습니다. 측면 조인을 줄이거 나지도 측 조인을 줄입니다.
여기서 그룹 키는 "타일"입니다. 하나의 감속기에서 점 쌍 및 선 쌍으로부터 모든 출력을 얻습니다. 그러나 배열의 포인트 쌍 또는 라인 쌍을 캐시해야합니다. 쌍 중 하나 (점 또는 선)가 너무 커서 단일 그룹 키 (각 고유 한 타일)에 대한 임시 배열 메모리에 맞지 않을 경우이 방법은 효과가 없습니다. 메모리에있는 단일 그룹 키 ( "타일")에 대해 키 쌍을 모두 보유 할 필요가 없다는 것을 기억하십시오.
단일 그룹 키에 대한 두 키 쌍이 큰 경우지도 측 결합을 시도해야합니다. 그러나 몇 가지 고유 한 요구 사항이 있습니다. 그러나 두 데이터 모두에 대해 같은 수의 감속기를 실행하는 일부 맵 / 축소 작업을 통해 데이터를 사전 처리하여 이러한 요구 사항을 충족시킬 수 있습니다.
-
==============================
3.나는 이것을 도움이되는 것으로 발견했다.
나는 이것을 도움이되는 것으로 발견했다.
일반 Map Reduce 또는 MultipleInputs와의 조인
http://kickstarthadoop.blogspot.in/2011/09/joins-with-plain-map-reduce.html
from https://stackoverflow.com/questions/11803450/join-of-two-datasets-in-mapreduce-hadoop by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 실험용 무료 Hadoop 클러스터 (0) | 2019.07.09 |
---|---|
[HADOOP] copyFromLocal 스위치를 사용하여 데이터를 hdfs로 이동 (0) | 2019.07.09 |
[HADOOP] MapReduce / Hadoop으로 고유 값 계산을 구현하는 방법은 무엇입니까? (0) | 2019.07.09 |
[HADOOP] HBase 테이블의 크기는 어떻게 결정합니까? 그렇게 할 수있는 명령이 있습니까? (0) | 2019.07.09 |
[HADOOP] .NET에서 Hadoop / Hive에 연결하는 방법 (0) | 2019.07.09 |