前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R读取大文件速度太慢?来试试能提速两千倍的fread

R读取大文件速度太慢?来试试能提速两千倍的fread

作者头像
实验盒
发布2021-09-22 12:20:28
1.9K0
发布2021-09-22 12:20:28
举报
文章被收录于专栏:实验盒实验盒

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 读取文件:

代码语言:javascript
复制
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 小时,我也懒得去研究是什么原因:

代码语言:javascript
复制
Time difference of 20.87034 hours

使用 fread 读取文件:

代码语言:javascript
复制
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 秒,还可以接受:

代码语言:javascript
复制
Time difference of 35.71124 secs

两种方法读取过程占用内存大约在 4.9G,但 fread 要快很多,速度提高了接近 2100 倍!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 实验盒 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档