将HDFS文件加载定位read或seek()并忽略文件的整个内容?

时间:2018-02-21 13:03:31

标签: java file hdfs

我想从某个偏移/位置读取大文件的子内容。 例如,我有一个1M行的文件,我想从100开始读取50行。 (第101至150行 - 包括在内)

我想我应该使用PositionalReadable。 https://issues.apache.org/jira/browse/HADOOP-519

我发现FSInputStream.readFully实际上使用了seek()的{​​{1}}方法。

当我检查Seekable的基础实现时,我发现它使用了seek()

blockReader.skip()不会读取整个数据直到跳过字节的位置吗?问题是HDFS也会加载前100行,以便到达第101行。

如何在不加载其余内容的情况下使位置在文件的第10000行等文件中的任何所需偏移量? s3在标题偏移中提供的东西。

以下是我发现的类似问题:How to read files with an offset from Hadoop using Java,但它建议使用BlockReader.skip(),并且在评论中认为seek()是昂贵的操作,应该谨慎使用。我猜这是正确的,因为搜索似乎读取了所有数据,以便跳到该位置。

0 个答案:

没有答案