Io Hadoop中的文本读取器类
我有一个目录输出,其中有来自Map Reduce作业的输出文件。输出文件是使用TextOutputFormat编写的文本文件 现在我想从输出文件中读取键值对。如何使用hadoop中的一些现有类来实现这一点。我可以这样做的一个方法是Io Hadoop中的文本读取器类,io,hadoop,Io,Hadoop,我有一个目录输出,其中有来自Map Reduce作业的输出文件。输出文件是使用TextOutputFormat编写的文本文件 现在我想从输出文件中读取键值对。如何使用hadoop中的一些现有类来实现这一点。我可以这样做的一个方法是 FileSystem fs = FileSystem.get(conf); FileStatus[] files = fs.globStatus(new Path(OUTPUT + "/part-*")); for(FileStatus file:files){
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();
}
}
这种方法会起作用,但会大大增加我的任务,因为我现在需要手动解析每行中的键值对。我正在寻找一种更方便的方法,可以直接读取某些变量中的键和值。在以前的工作中,您是否被迫使用
TextOutputFormat
作为您的输出格式
如果不考虑使用序列文件输出格式,那么可以使用StaseCeFel.Reader以键/值对读取文件。您还可以使用hadoop fs-text path/to/output/part-r-00000“查看”文件
编辑:您也可以使用
KeyValueLineRecordReader
类,只需将FileSplit传递给构造函数。我使用TextOutputFormat,因为我需要输出文件为可读文件。我已经考虑过你的建议了,谢谢,那是我最后的选择。