2013-02-20 11 views
1

지도를 작성하여 hdfs에있는 두 개의 큰 파일을 비교하십시오. 어떤 생각을 달성하는 방법. 또는 파일 크기가 매우 크기 때문에 비교할 다른 방법이 없다면 map-reduce를 사용하는 것이 이상적인 방법입니다. 도움 주셔서 감사합니다.hdfs에서 두 파일 비교

답변

0

2 단계로 수행 할 수 있습니다.

: 이제

I am awesome 
He is my best friend 

는이 같은이 변환 :

초기 파일과 같은 말 :

  1. 먼저 텍스트 파일의 일부가 될 줄 번호를 만들
    1,I am awesome 
    2,He is my best friend 
    

    MapReduce 작업 자체 나 다른 도구를 사용하면됩니다.

        2. 매퍼에서 줄 번호를 키로, 실제 문장의 나머지 부분을 값으로내는 MapReduce 단계를 작성하십시오. 그런 다음 감속기에서 값을 비교하면됩니다. 일치하지 않을 때 줄 번호 (키)와 페이로드를 내 보냅니다. 여기서 원하는 것이 무엇이든간에. 또한 values의 수가 1이면 또한 불일치입니다.

    편집 : 더 나은 접근 방식

    더 나은 여전히 ​​당신은 단지 키와 매퍼에서 한 번에 읽어 전체 라인을 방출하고 값을 숫자를 확인한다 무엇을 할 수 있는지, 그래서 내를 복용 1. 말 예를 들어 다음과 같이 위의 매퍼 출력은 다음과 같습니다이 2가 아닌 경우

    < I am awesome,1 > 
    
    < He is my best friend,1 > 
    

    그리고 감속기의

    그냥 당신이 불일치를 가지고, values의 수를 확인합니다.

    그러나이 접근법에는 하나의 포착이 있습니다. 두 개의 다른 위치에서 정확히 동일한 행이 발생할 가능성이있는 경우 감속기의 주어진 키에 대해 values의 길이를 확인하는 대신 확인해야합니다 2의 배수.

+0

안녕하세요, Amar, 귀하의 회신에 감사드립니다. 하지만 내 파일에는 두 파일에 나타나는 항목 ID가 있습니다. 두 아이디가 같은지 비교해 볼 필요가 있습니다. – NewJavaBee

+0

파일에 무엇이 있는지 상관하지 않습니다. 비교하면 이진 비교를 의미하는 것입니까? 파일에 '나는 굉장합니다'대신에 ID가있을 수 있습니다 (1234456565). – Amar

+0

나는이 두 파일이 있다고 가정 해 보겠습니다. 파일 1에 ID : 1 ... .. ID : 2 ... 포함되어 있습니다. ID : 3 .... 파일 2 ID : 5 ... .. ID : 3. ID : 6 .... 이제 비교해보십시오. 먼저 두 파일의 ID를 비교해야합니다. 질서가 불평하지 않습니다. – NewJavaBee

0

하나의 가능한 해결책은 줄 번호를지도 작업에 카운트 할 수 있습니다. 두 개의 파일이 아래와 같이 있습니다

파일 1 : 은 내가 최고입니다 여기 --line 1 오전 - 3 호선

파일이 유사한 종류 - 2 호선 당신은 나의 가장 친한 친구 내가

이 파일 모두지도의 작업을 할 후에는 두 개의 레코드 (키, 값)이있는 동일> ... 2, 멋진 가지고 있어요 <처럼

지금지도 작업을 출력해야 감소시킬 값.

줄일 때 카운터를 비교하거나 같이 출력을 생성 할 수 있습니다. 행이 다른 위치에 너무 많으면 출력은이 행이 일치하지 않음을 나타낼 수 있습니다.

0

파일과 키를 비교하는 솔루션이 있습니다.귀하의 ID가 고유하다는 것을 알고있는 경우 ID의 키를 맵에서 표시 할 수 있으며 전체 레코드는 가치가 있습니다. 파일에 ID가 있고 Line1이 mapper에서 키와 값으로 방출한다고 가정 해 봅시다.

셔플 및 정렬 단계에서 ID가 정렬되고 두 파일의 데이터가 포함 된 반복자가 생성됩니다. 즉, 동일한 ID를 가진 두 파일의 레코드가 같은 반복기에 저장됩니다.

그런 다음 감속기에서 반복기의 값을 비교하고 일치하는 경우 다음 레코드로 이동하십시오. 그렇지 않으면 일치하지 않으면 결과를 출력합니다.

나는 이것을했고 그것은 매력처럼 작동했습니다.

시나리오 - 일치하는 키가 없음 두 파일 사이에 일치하는 ID가 없으면 하나의 반복자 값만 있습니다.

시나리오 2 - 중복 키 파일에 중복 키가 있으면 이터레이터에 2 개 이상의 값이 있습니다.

참고 : 반복기에 값이 2 개만있는 경우에만 값을 비교해야합니다. ** 팁 : ** 반복기는 항상 값을 순서대로 가지지 않습니다. 특정 파일의 값을 확인하려면 매퍼에서 Line1; file1과 같은 줄 끝에 작은 표시기를 추가하십시오. Line1; file2 그러면 감속기에서 어떤 값이 어떤 매퍼에 속하는지 식별 할 수 있습니다.