我有一个表示序列文件的通用输入流。我想从中创建一个sequencefile.reader或类似的类,而不需要将输出流写入磁盘上的临时文件。有什么东西需要我从一个输入流转到一个允许我从输入流读取键/值对的东西吗。
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 从流中读取的字节数。设置读卡器可能如下所示:
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 ,您可以读取如下值:
Reader
Text key = new Text(); Text val = new Text(); while (reader.next(key,val)) { //do stuff }
同样,我根本没有测试过这个代码,但这在理论上应该是可行的。如果您不使用hadoop2.0+,我不知道该告诉您什么。
1条答案
按热度按时间svgewumm1#
出于某种原因,似乎没有任何关于当前sequencefile.reader类的文档,但通过查看hadoop 2.0+的代码,我相信以下内容可以奏效:
你也可能对这些选项感兴趣
start
以及length
,在哪里start
是读取序列文件之前要跳过的字节数,以及length
从流中读取的字节数。设置读卡器可能如下所示:最后,一旦你构建了你的
Reader
,您可以读取如下值:同样,我根本没有测试过这个代码,但这在理论上应该是可行的。如果您不使用hadoop2.0+,我不知道该告诉您什么。