我想从某个偏移/位置读取大文件的子内容。 例如,我有一个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()
是昂贵的操作,应该谨慎使用。我猜这是正确的,因为搜索似乎读取了所有数据,以便跳到该位置。