2017-10-11 85 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