2013-08-14 3 views
-1

나는 hadoop에서 매우 새로 운다. 및 매퍼 이런 입력 INT를 원한다지도 축소 입력 형식

1 2 3 4 6 7 8 //////

3 3 2 1 9 0 5 //////

=== == //////// -----

키 값 /////////

값 3 키 옆에 숫자

제 1 내지 제 4? mapper 클래스에서 java로 작성하는 데 plzz 도움을 주시겠습니까?

나는 파일에서 그것을 읽고 싶지 않다.

답변

0

"파일에서 읽지 않으시겠습니까?"라는 것이 무엇을 의미하는지 확신 할 수 없습니다. 당신이해야 할 일은 파일에서 각 줄을 읽고 각 줄을 '//////'로 나누는 것입니다. 당신이 원하는 경우

public static class MapClass extends MapReduceBase implements 
     Mapper<LongWritable, Text, Text, Text> { 
    private Text word = new Text(); 

    public void map(LongWritable key, Text value, 
      OutputCollector<Text, Text> output, Reporter reporter) 
      throws IOException { 
     String line = value.toString(); 
     StringTokenizer tokenizer = new StringTokenizer(line, "//////", 
       false); 
     word.set("key:"+tokenizer.nextToken()); 
     output.collect(word, new Text("value="+tokenizer.nextToken())); 
    } 
} 
+0

thnx 대단히 비니 의미 mapreduce 코드에서 내 입력 데이터를 읽을 – Mohammad

0

, 당신은 전에 내가 당신이하려는 일을 할 수있는 쉬운 방법 상상 매퍼를 값 에서 키를 나눌 수 있습니다. KeyValueTextInputFormat을 입력 클래스로 사용하여 수행 할 수 있습니다. 이것은 당신이 필요로하는 것과 정확히 동일합니다. 매퍼에 전달 된 값에서 키를 분리하는 구분 기호/구분 기호를 선택할 수 있습니다. 당신은 일을하여 설정합니다 :

job.setInputFormatClass(KeyValueTextInputFormat.class);

은 그럼 당신은 입력하여 구분 기호를 선택할 것 :

Configuration conf = new Configuration(); conf.set("mapreduce.input.keyvaluelinerecordreader.key.value.separator","//////");

를 그런 다음 당신의 매퍼에 도착했을 때, 그것은 이미 분할입니다.

+0

친애하는 에릭 내가 말해 줄께이 conf는 말해 : 메서드는 setInputFormatClass (클래스 ) 형식에 인수 (클래스 ) – Mohammad