【发布时间】:2013-09-14 05:29:51
【问题描述】:
如何读取固定宽度格式的大数据?我阅读了this 问题并尝试了一些提示,但所有答案都是针对分隔数据(如 .csv),这不是我的情况。数据有558MB,不知道有多少行。
我正在使用:
dados <- read.fwf('TS_MATRICULA_RS.txt', width=c(5, 13, 14, 3, 3, 5, 4, 6, 6, 6, 1, 1, 1, 4, 3, 2, 9, 3, 2, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 4, 11, 9, 2, 3, 9, 3, 2, 9, 9, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1), stringsAsFactors=FALSE, comment.char='',
colClasses=c('integer', 'integer', 'integer', 'integer', 'integer', 'integer', 'integer', 'integer', 'integer', 'integer', 'character', 'character', 'character',
'integer', 'integer', 'character', 'integer', 'integer', 'character', 'integer', 'character', 'character', 'character', 'character', 'character', 'character',
'character', 'character', 'character', 'character', 'character', 'character', 'character', 'character', 'character', 'character', 'character', 'character',
'character', 'character', 'character', 'character', 'character', 'character', 'character', 'character', 'character', 'character', 'character', 'integer',
'integer', 'integer', 'integer', 'integer', 'integer', 'integer', 'integer', 'character', 'integer', 'integer', 'character', 'character', 'character',
'character', 'integer', 'character', 'character', 'character', 'character', 'character', 'character', 'character', 'character'), buffersize=180000)
但读取数据需要 30 分钟(而且还在继续……)。有什么新建议吗?
【问题讨论】:
-
我不知道如何加快速度,但我也会在加载后将类似的大文件保存为 R 对象,这样我以后可以更快地加载它们。
-
是的,我也是。但我需要从这个文件(现在)是一个简单的表,然后加载另一个大到:/
-
我刚刚使用以下策略读取了 4GB FWF:使用“big ram”队列 (30GB) 在集群上加载。另存为 R 对象。花了一整夜。所以它与大数据有关。希望有人有更有效的策略。
-
你有宽度索引吗?使用 substr 尝试 sqldf。或者创建一个 csvkit 架构文件并使用 csvkit 创建您的 CSV 并从 data.table 读取 CSV。
-
我稍后会尝试更新我的答案,但与此同时,我想分享一个您可能感兴趣的包:iotools。