文章分类提示:
- 问题: data.table可以操作多大的资料量?
[问题类型]:
效能咨询(我想让R 跑更快)
[软件熟悉度]:
入门(写过其他程式,只是对语法不熟悉)
[问题叙述]:
小弟最近有一个差不多3GB的dataset
目前是想将此dataset input到R中利用data.table操作资料
但未来可能会有更大的资料量需要操作
所以想询问一下版上的各位大大
(1)过去有利用data.table套件操作多大的资料量呢?
过去版上有一篇文章有讨论到data.frame使用到dataset两倍的内存量
(2)那么data.table是否也有这样的问题呢?
(3)dataset的大小是否也会受限于电脑Ram的大小呢?
最近资料量实在困扰到小弟!
感谢各位前辈耐心看完!
[关键字]:
data.table
作者:
andrew43 (讨厌有好心推文后删文者)
2015-03-04 00:36:00读入后你将进行什么操作或分析?我刚测一下,data.frame(runif(1.25e+08)) 用了快1GB,但 data.tabe(runif(1.25e+08)) 用了快2GB。
aggregation,filter,grouping,新增字段,还有一些些的ETL,最后是要产出一个352X352的列联表
作者:
andrew43 (讨厌有好心推文后删文者)
2015-03-04 01:21:00什么原因我不清楚……但data.frame并没看到多浪费ram。你可以先造假资料做做看。大不了进swap,比较慢罢了。还不行再改用其它方法。
作者:
andrew43 (讨厌有好心推文后删文者)
2015-03-04 01:30:00另外,你说3GB资料,是指文字档案大小还是浮点数?
作者:
andrew43 (讨厌有好心推文后删文者)
2015-03-04 01:31:00评估时应该换算成实际ram里头的资料型态,会准一点。纯文字的话,和3GB大概不会差太多了。
作者:
andrew43 (讨厌有好心推文后删文者)
2015-03-04 01:35:00嗯,也可以这样说啦。我只是想到"1"是1B但1.0是8B的差别
作者:
lofu (lofu)
2015-03-04 08:17:00推文不解释
作者:
Wush978 (拒看低质媒体)
2015-03-04 19:50:00两倍的说法来自于R的实作是copy on write,所以两倍比较安全。否则你一修改物件,就进swap了这只是一个rule of thumb,实际还是和你的操作有关data.table能处理的资料量和电脑的内存比较有关个人经验是只要不进swap, 10g ~ 30g 的资料跑的动的
有什么方法知道进入swap呢,电脑ram为16gb,3gb左右用datatable处理起来还是要满久~
作者:
andrew43 (讨厌有好心推文后删文者)
2015-03-04 22:16:00什么作业系统呢?
OSX 10.10 mbpr 13' RAM: 16GB,感谢前辈!
作者:
andrew43 (讨厌有好心推文后删文者)
2015-03-04 23:32:00开Activity Monitor, 选Memory,看Swap used正常情况这个量只有几MB,超过就是爆了。
刚刚在做GB left_join GB,swap跑到123mb... 过阵子R sR session aborted
作者:
andrew43 (讨厌有好心推文后删文者)
2015-03-05 01:12:00swap用百MB应该都还好。R结束是被你结束还是自动结束的?
作者:
Wush978 (拒看低质媒体)
2015-03-05 07:35:0016gb 有 3gb应该很ok, 你可以把内存交给R 自己处理用data.table的特色是可以在memory中建index加速存取你有适当的建index吗?
我有两个data.table档,Row:2000万笔左右 Col:6,index都建在id,试过两个
作者:
andrew43 (讨厌有好心推文后删文者)
2015-03-05 17:17:00不知道原po要做的分析,改到database里做可不可能?不过还要多做不少工作,还要再写sql。
试过两个语法 ex:dplyr::left_join & Data[,list..]这两个都阵亡!,回a大,小弟因不熟MSSQL的语法所以才load进R来做,也想借机会看看R的发挥性,我在找找看其他方法, 有更有效率的方式我在回复文章!谢谢两位前辈!
作者:
Wush978 (拒看低质媒体)
2015-03-05 17:58:00index做在left_join的by看看呢?