inputstream到hadoop序列文件

qij5mzcb  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(367)

我有一个表示序列文件的通用输入流。我想从中创建一个sequencefile.reader或类似的类,而不需要将输出流写入磁盘上的临时文件。有什么东西需要我从一个输入流转到一个允许我从输入流读取键/值对的东西吗。

svgewumm

svgewumm1#

出于某种原因,似乎没有任何关于当前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
}

同样,我根本没有测试过这个代码,但这在理论上应该是可行的。如果您不使用hadoop2.0+,我不知道该告诉您什么。

相关问题