我有一个像
这样的输入文件LOW LOW HIGH LOW LOW
LOW HIGH MOD LOW LOW
HIGH LOW HIGH HIGH HIGH
LOW LOW LOW LOW LOW
. . . . .
. . . . .
我希望得到如下结果:
Genuine
Moderate
Not_genuine
Genuine
.
.
为此,我需要解析一行并在每一行上应用WordCount,然后根据no。计数高或低我会指定所需的结果。
通过使用Stringtokenizer
,所有行都会被考虑在内,split method
也没有得到行(\n)
的结尾。无论如何,我可以继续解决这个问题并获得所需的答案
完成代码的代码
这是我试图通过提取\n
public void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
String line = value.toString();
StringTokenizer tokenizer = new StringTokenizer(line);
while (tokenizer.hasMoreTokens()) {
if(tokenizer.equals("\n")){
System.out.println("Line ends here");
Log log = LogFactory.getLog(getClass());
log.info("Line ends here");
}
word.set(tokenizer.nextToken());
context.write(word, one);
}
答案 0 :(得分:0)
在mapper类中,您可以使用hashset类型的机制来计算不同的单词。所以你不需要减速器。
答案 1 :(得分:0)
假设使用TextInputFormat,每个map()方法的输入value
是一行。因此,最后有一个换行符是没有意义的。这就是您在log
中看不到任何消息的原因。
正如Karthik建议的那样,你不需要减速器。你需要的只是汇总每个输入value
(即行)的'HIGH','LOW'和'MOD'的数量并发出你的分类('Genuine','Moderate','Not-Genuine')直接来自mapper。
答案 2 :(得分:0)
我认为问题是你的输入文件。
使用以下代码检查输入文件是否正确。
public static void main(String agr[]) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(
"yourfilelocation"));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
之后,您可以编写用于计算Mapper中不同单词的逻辑。
希望这有帮助。