[HADOOP] 파일 당 카운트와 단어 수 예
HADOOP파일 당 카운트와 단어 수 예
내가 파일 당 단어의 발생의 총 수의 붕괴를 얻기 위해 문제가 발생하고있다. 예를 들어, 나는 네 개의 텍스트 파일 (T1, T2, T3, T4)가 있습니다. 단어 W1 세의 총 발생으로, 파일 T2에 두 번, 그리고 한 번 T4있다. I 출력 파일에 동일한 정보를 작성합니다. 나는 각 파일의 단어 수를 얻고있다,하지만 난 위와 같이 원하는 결과를 얻을 수 없습니다.
여기 내지도 클래스입니다.
import java.io.IOException;
import java.util.*;
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapreduce.*;
//line added
import org.apache.hadoop.mapreduce.lib.input.*;
public class Map extends Mapper<LongWritable, Text, Text, IntWritable> {
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
private String pattern= "^[a-z][a-z0-9]*$";
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String line = value.toString();
StringTokenizer tokenizer = new StringTokenizer(line);
//line added
InputSplit inputSplit = context.getInputSplit();
String fileName = ((FileSplit) inputSplit).getPath().getName();
while (tokenizer.hasMoreTokens()) {
word.set(tokenizer.nextToken());
String stringWord = word.toString().toLowerCase();
if ((stringWord).matches(pattern)){
//context.write(new Text(stringWord), one);
context.write(new Text(stringWord), one);
context.write(new Text(fileName), one);
//System.out.println(fileName);
}
}
}
}
해결법
-
==============================
1.이것은 당신은 값으로 키와 파일 이름으로 단어를 작성하여 얻을 수 있습니다. 이제 감속기의 각 파일에 대한 별도의 카운터를 초기화하고 업데이트합니다. 모든 값이 특정 키에 대한 반복되면, 다음 컨텍스트에 각 파일에 대한 카운터를 작성합니다.
이것은 당신은 값으로 키와 파일 이름으로 단어를 작성하여 얻을 수 있습니다. 이제 감속기의 각 파일에 대한 별도의 카운터를 초기화하고 업데이트합니다. 모든 값이 특정 키에 대한 반복되면, 다음 컨텍스트에 각 파일에 대한 카운터를 작성합니다.
여기에 당신은 당신이 네 개의 파일이 있는지 알고 있습니다, 그래서 당신은 할 수있는 하드 코드 네 개의 변수입니다. 당신이 감속기에서 처리하는 각각의 새로운 키에 대한 변수를 재설정해야 기억하십시오.
경우 파일의 수는지도를 사용할 수있는 다음 추가하는 경우. 지도에서, 파일 이름은 열쇠가 될 것입니다 및 값을 업데이트 계속.
-
==============================
2.매퍼의 출력에서 우리는 키와 텍스트 파일 이름과 값으로 파일의 각 행을 설정할 수 있습니다. 이 감속기는 당신에게 파일 이름 단어와 그에 대응하는 수를 제공합니다.
매퍼의 출력에서 우리는 키와 텍스트 파일 이름과 값으로 파일의 각 행을 설정할 수 있습니다. 이 감속기는 당신에게 파일 이름 단어와 그에 대응하는 수를 제공합니다.
public class Reduce extends Reducer<Text, Text, Text, Text> { HashMap<String, Integer>input = new HashMap<String, Integer>(); public void reduce(Text key, Iterable<Text> values , Context context) throws IOException, InterruptedException { int sum = 0; for(Text val: values){ String word = val.toString(); -- processing each row String[] wordarray = word.split(' '); -- assuming the delimiter is a space for(int i=0 ; i<wordarray.length; i++) { if(input.get(wordarray[i]) == null){ input.put(wordarray[i],1);} else{ int value =input.get(wordarray[i]) +1 ; input.put(wordarray[i],value); } } context.write(new Text(key), new Text(input.toString())); }
from https://stackoverflow.com/questions/32969870/wordcount-example-with-count-per-file by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 하이브 테이블 Sqoop을 수출에 문제는 타임 스탬프에 의해 분할 (0) | 2019.10.01 |
---|---|
[HADOOP] HIVE LLAP는 복잡한 유형 작동하지 않습니다 (0) | 2019.10.01 |
[HADOOP] 하이브 쿼리를 실행할 때 권한이 거부 (0) | 2019.10.01 |
[HADOOP] 하이브 테이블에 대한 JSON 파일의 항목 구분 (0) | 2019.10.01 |
[HADOOP] 하둡 자바 클래스를 찾을 수 없습니다 (0) | 2019.10.01 |