我有一个表示序列文件的通用输入流。我想从它创建一个SequenceFile.Reader或类似的类,而不需要将输出流写入磁盘上的临时文件。是否有什么东西会让我从输入流到允许我从输入流读取键/值对的东西。
发布于 2014-04-07 19:07:47
由于某些原因,似乎没有关于当前SequenceFile.Reader类的任何文档,但是仔细查看Hadoop 2.0+的代码,我相信以下内容会有效:
FSDataInputStream inputStream = new FSDataInputStream (rawInputStream);
Option isOption = SequenceFile.Reader.stream(inputStream);
SequenceFile.Reader reader = new SequenceFile.Reader(hadoopConf,isOption);您还可能对选项start和length感兴趣,其中start是读取序列文件之前要跳过的字节数,length是从流读取的字节数。设置该读取器可能如下所示:
FSDataInputStream inputStream = new FSDataInputStream (rawInputStream);
Option isOption = SequenceFile.Reader.stream(inputStream);
Option lengthOption = SequenceFile.Reader.length(100000);
Option startOption = SequenceFile.Reader.start(10);
SequenceFile.Reader reader = new SequenceFile.Reader(hadoopConf,isOption,lengthOption,startOption);最后,一旦构建了您的Reader,您就可以以如下方式读取您的值:
Text key = new Text();
Text val = new Text();
while (reader.next(key,val)) {
//do stuff
}同样,我根本没有测试过这段代码,但这在理论上是可行的。如果您没有使用Hadoop 2.0+,我不知道该告诉您什么。
https://stackoverflow.com/questions/22919013
复制相似问题