복붙노트

[HADOOP] 하둡과 하나의 기록과 같은 텍스트 파일에서 처리 paraphragraphs

HADOOP

하둡과 하나의 기록과 같은 텍스트 파일에서 처리 paraphragraphs

내 문제가 조금 단순화, 나는 두 줄 바꿈 문자로 구분됩니다 "기록"텍스트 파일의 집합을 가지고있다. 처럼

기타 등등.

나는 개별적으로 각각의 여러 단위를 변환 한 다음에 맵리 듀스를 수행해야합니다.

그러나, 나는 하둡 코드 보일러의 기본 단어 수 설정으로, 다음 함수의 값을 변수에 입력이 하나의 선이 있음을 알고 및 입력이 이전 입력 라인 연속임을 보장은 없습니다.

public void map(LongWritable key, Text value, 
                OutputCollector<Text, IntWritable> output, 
                Reporter reporter) throws IOException ;

그리고 나는 그것이 입력 값이 여러 줄 텍스트를 구분 실제로 이중 줄 바꿈 한 단위라고해야합니다.

일부 검색 내가 주위에 내 머리를 정리 할 수있는 RecordReader 클래스와 getSplits 방법하지만 간단한 코드 예제를 돌았 다.

또 다른 해결책은 공백 문자로 여러 줄 텍스트의 모든 줄 바꿈 문자를 대체하고 그것으로 할 수있다. 텍스트의 꽤가 있기 때문에 차라리 이렇게하지 않는 게 좋을 그리고 실행의 측면에서 소요되는 시간이다. 나는 또한이 그렇게 나에게 가장 매력적인 것 Hadoop을 통해 다루는 경우 많은 코드를 수정해야합니다.

해결법

  1. ==============================

    1.파일의 크기가 작은 경우, 그들은 분할을받지 않습니다. 기본적으로 각 파일은 하나 개의 매퍼 인스턴스에 할당 한 분할이다. 이 경우, 나는 토마스에 동의합니다. 당신은 문자열을 연결하여, 당신의 매퍼 클래스에 논리 레코드를 구축 할 수 있습니다. 당신은 당신의 매퍼에 값으로 들어오는 빈 문자열을 찾는하여 기록 경계를 감지 할 수 있습니다.

    파일의 크기가 작은 경우, 그들은 분할을받지 않습니다. 기본적으로 각 파일은 하나 개의 매퍼 인스턴스에 할당 한 분할이다. 이 경우, 나는 토마스에 동의합니다. 당신은 문자열을 연결하여, 당신의 매퍼 클래스에 논리 레코드를 구축 할 수 있습니다. 당신은 당신의 매퍼에 값으로 들어오는 빈 문자열을 찾는하여 기록 경계를 감지 할 수 있습니다.

    파일이 크고 분할을받을 경우, 그때 자신의 텍스트 입력 형식의 클래스를 구현하는 것 외에 다른 옵션이 표시되지 않습니다. 당신은 기존의 하둡 LineRecordReader 및 LineReader 자바 클래스를 복제 할 수 있습니다. 당신은 레코드 구분 기호 대신에 하나의, 두 개의 새로운 라인 될 수 있도록 LineReader 클래스의 버전에서 작은 변화를해야한다. 이 작업이 완료되면, 당신의 매퍼 입력 값으로 여러 줄을 받게됩니다.

  2. ==============================

    2.그것의 문제는 무엇입니까? 그냥 모두 StringBuilder로 이전 라인을 넣어 새로운 기록에 도달했을 때를 세척합니다. 당신이 textfiles를 사용하는 경우, 그들은 분할을받지 않습니다. 이런 경우에만 사용할 수있는 파일의 수를 병렬화 FileInputFormat를 사용합니다.

    그것의 문제는 무엇입니까? 그냥 모두 StringBuilder로 이전 라인을 넣어 새로운 기록에 도달했을 때를 세척합니다. 당신이 textfiles를 사용하는 경우, 그들은 분할을받지 않습니다. 이런 경우에만 사용할 수있는 파일의 수를 병렬화 FileInputFormat를 사용합니다.

  3. from https://stackoverflow.com/questions/5827997/processing-paraphragraphs-in-text-files-as-single-records-with-hadoop by cc-by-sa and MIT license