R讀取大文件速度太慢?來試試能提速兩千倍的fread


R 的 read.tableread.csv 讀取文件速度比較慢。尤其在讀取稍微大一點的數據,需要等很長時間。

在需要讀取大文件時,尤其讀取列數特別多的文件,不妨試試 data.table 包(https://cran.r-project.org/web/packages/data.table)的 fread (Fast and friendly file finagler)。它的參數與 read.table 函數類似,但讀取速度有非常大提升。

提速兩千倍並不是標題黨,而是在一個 489 行、1079796 列、1G 純文本文件中的實測結果。測試機器配置為 2T 內存、80 核 160 線程 CPU(四路Xeon Gold 6248)、SSD 硬盤(RAID 5)。

使用 read.table 讀取文件:

times.start <- Sys.time()
file.readtable <- read.table('test.file', sep = ' ', header = TRUE, row.names = 1)
time.end <- Sys.time()
time.running <- time.end-time.start
print(time.running)

讀取速度非常慢,竟然花了 20.87 小時,我也懶得去研究是什么原因:

Time difference of 20.87034 hours

使用 fread 讀取文件:

library("data.table")
time.start <- Sys.time()
file.fread <- fread('test.file', sep = ' ', header = TRUE)
time.end <- Sys.time()
time.running <- time.end-time.start
print(time.running)

需要 35.71 秒,還可以接受:

Time difference of 35.71124 secs

兩種方法讀取過程占用內存大約在 4.9G,但 fread 要快很多,速度提高了接近 2100 倍!



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM