mapreduce将3列标记化

wmtdaxz3  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(341)

我正在写一个需要读3列的map函数。我有一个文本文件:

  1. 1234567 12234254 40

如何更改一个简单的wordcountMap器的stringtokenizer,使其能够在使用while循环时读取3行

  1. public static class TokenizerMapper
  2. extends Mapper<Object, Text, Text, IntWritable>{
  3. private final static IntWritable one = new IntWritable(1);
  4. private Text word = new Text();
  5. public void map(Object key, Text value, Context context
  6. ) throws IOException, InterruptedException {
  7. StringTokenizer itr = new StringTokenizer(value.toString());
  8. while (itr.hasMoreTokens()) {
  9. word.set(itr.nextToken());
  10. context.write(word, one);
  11. }
  12. }

}

b4wnujal

b4wnujal1#

这段代码的工作方式与您想要的完全一样,但正如javadoc中所述
stringtokenizer是一个遗留类,尽管新代码中不鼓励使用它,但出于兼容性原因保留了它
相反,使用for循环

  1. private Text t = new Text();
  2. ...
  3. for (String column : value.toString().split("\\s+")) {
  4. t.set(column);
  5. context.write(t, ONE);
  6. }

相关问题