2

我有一个目录 OUTPUT,其中包含 Map Reduce 作业的输出文件。输出文件是使用 TextOutputFormat 编写的文本文件。

现在我想从输出文件中读取键值对。如何使用 hadoop 中的一些现有类来做到这一点。我可以做到的一种方法如下

FileSystem fs = FileSystem.get(conf);
FileStatus[] files = fs.globStatus(new Path(OUTPUT + "/part-*"));
for(FileStatus file:files){
  if(file.getLen() > 0){
    FSDataInputStream in = fs.open(file.getPath());
    BufferedReader bin = new BufferedReader(new InputStreamReader(
        in));
    String s = bin.readLine();
    while(s!=null){
      System.out.println(s);
      s = bin.readLine();
    }
    in.close();
  }
}

这种方法可行,但会大大增加我的任务,因为我现在需要手动解析每一行中的键值对。我正在寻找更方便的东西,可以直接让我读取某些变量中的键和值。

4

1 回答 1

1

您是否被迫TextOutputFormat在上一份工作中使用作为您的输出格式?

如果没有,则考虑使用 SequenceFileOutputFormat,然后您可以使用 SequenceFile.Reader 以键/值对的形式读回文件。您还可以使用“查看”文件hadoop fs -text path/to/output/part-r-00000

编辑:您也可以使用KeyValueLineRecordReader该类,您只需将 FileSplit 传递给构造函数。

于 2012-06-12T15:39:10.423 回答