복붙노트

[HADOOP] MapReduce : 줄 바꿈없이 키 / 값 쌍을 출력하려면 어떻게해야합니까?

HADOOP

MapReduce : 줄 바꿈없이 키 / 값 쌍을 출력하려면 어떻게해야합니까?

내 문제에 0 감소 접근 방식을 사용하고 있습니다. 한 파일의 데이터를 전처리 한 다음 다른 파일로 쓰려고하지만 새 줄과 탭 구분 기호는 없습니까? 전처리에서 빼낸 것과 동일한 파일 형식으로 데이터를 처리 한 맵 작업을 어떻게 출력 할 수 있습니까? 즉, 나는 다음과 같은 것을 가지고있다 :

전처리 :

<TITLE> Herp derp </Title> I am a major general  

후 처리:

Herp 
Derp 
I 
am 
a
major
general

내가하고 싶은 것은 이것입니다 :

Herp Derp I am a major general 

이 문제는 다음 코드 줄과 관련이 있다고 생각합니다.

job.setOutputFormatClass(TextOutputFormat.class);

그러나 내가 시도했을 때, 매우 순진하게 다음과 같은 일을했습니다.

job.setOutputFormatClass(null);

분명히 작동하지 않습니다. 이 작업을 수행하는 데 사용할 수있는 형식 클래스가 있습니까? 그렇지 않다면 원하는대로 모든 것을 출력하기 위해 어떻게 자신의 클래스를 작성할 수 있습니까? 나는 hadoop과 map reduce를 처음 사용합니다.

아래에 내지도 기능을 포함 시켰습니다. 맵과 감속기 사이를 정렬 할 때 Reduce를 사용하고 싶지 않습니다.

        public void map(LongWritable key, Text value, Context context)
                throws IOException, InterruptedException {

            String line = value.toString();
            StringTokenizer tokenizer = new StringTokenizer(line);


            while (tokenizer.hasMoreTokens()) {

                word.set(tokenizer.nextToken());

                //Did preprocessing here, irrelevant to my problem

                context.write(word, null);
            }
        }

또한, 나는 이것을 googled하고 apache hadoop api를 읽고 대답을 빛낼 수 있는지 확인했습니다.

해결법

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

    1.매퍼 클래스에서 줄을 개별 단어로 파싱하고 쓰는 대신 전체 줄을

    매퍼 클래스에서 줄을 개별 단어로 파싱하고 쓰는 대신 전체 줄을

    context.write(word, null);
    

    그렇게하면 줄을 하나씩 보내지 않고 원래 함께 작업하는 전체 문자열을 유지합니다.

    따라서 사전 프로세스 작업을 위해 문자열을 잘라낸 다음 context.write 명령으로 보낼 때 다시 묶습니다.

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

    2.매퍼가 단일 입력 행에서 개별 토큰을 포함하는 여러 레코드를 작성하는 경우 출력을 위해 해당 토큰을 단일 행으로 다시 그룹화하는 감속기가 절대적으로 필요합니다. 감속기가 없으면이 작업을 수행 할 수 없습니다.

    매퍼가 단일 입력 행에서 개별 토큰을 포함하는 여러 레코드를 작성하는 경우 출력을 위해 해당 토큰을 단일 행으로 다시 그룹화하는 감속기가 절대적으로 필요합니다. 감속기가 없으면이 작업을 수행 할 수 없습니다.

  3. from https://stackoverflow.com/questions/19070640/mapreduce-how-can-i-output-key-value-pair-without-newlines by cc-by-sa and MIT license