2017-10-11 34 views
0

我正在学习Blocked sort-based indexing并且该算法讲述了通过32或64kb的某个块加载文件,因为磁盘读取是通过块来进行的,因此效率很高。通过256kb的块将内容加载到内存

我的第一个问题是我该如何加载逐块文件?64kb的缓冲区读取器?但是,如果我使用java输入流,这个优化是否已经完成,我可以只是流动的流?

我实际上使用apache spark,所以sparkContext.textFile()是否做这个优化?火花流传输怎么样?

+0

您使用哪种文件系统来存储文件?另外,你的文件的格式是什么? –

+0

@AlexandreDupriez普通的pc存储系统,但我也可以使用Hadoop,并且该文件将是txt,但我想知道不同的解决方案,如果它们对json,csv不同。 –

回答

0

我不认为在JVM上你有任何直接查看文件系统,这将使读取和块大小对齐有意义。此外,现在还有各种驱动器和许多不同的文件系统,并且块大小对于总I/O时间很可能会有所不同甚至几乎没有影响。

最佳性能可能是使用java.nio.FileChannel,然后您可以尝试读取给定块大小的ByteBuffer以查看它是否会产生任何性能差异。我猜想你看到的唯一影响是对于非常小的缓冲区的JVM开销更重要(极端情况下,逐字节读取)。

您也可以使用文件通道的map方法来获取MappedByteBuffer