[问题] data.table可以操作的资料量

楼主: squallscer (羽毛)   2015-03-03 23:33:00
文章分类提示:
- 问题: 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。
楼主: squallscer (羽毛)   2015-03-04 01:20:00
aggregation,filter,grouping,新增字段,还有一些些的ETL,最后是要产出一个352X352的列联表
作者: andrew43 (讨厌有好心推文后删文者)   2015-03-04 01:21:00
什么原因我不清楚……但data.frame并没看到多浪费ram。你可以先造假资料做做看。大不了进swap,比较慢罢了。还不行再改用其它方法。
楼主: squallscer (羽毛)   2015-03-04 01:28:00
那篇文章为"内存不足"的回文中看到的~好的!谢谢
作者: andrew43 (讨厌有好心推文后删文者)   2015-03-04 01:30:00
另外,你说3GB资料,是指文字档案大小还是浮点数?
楼主: squallscer (羽毛)   2015-03-04 01:31:00
多数的column皆为文字资料
作者: andrew43 (讨厌有好心推文后删文者)   2015-03-04 01:31:00
评估时应该换算成实际ram里头的资料型态,会准一点。纯文字的话,和3GB大概不会差太多了。
楼主: squallscer (羽毛)   2015-03-04 01:33:00
意思是在R里看他所占的内存大小吗?
作者: 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 的资料跑的动的
楼主: squallscer (羽毛)   2015-03-04 21:54:00
有什么方法知道进入swap呢,电脑ram为16gb,3gb左右用datatable处理起来还是要满久~
作者: andrew43 (讨厌有好心推文后删文者)   2015-03-04 22:16:00
什么作业系统呢?
楼主: squallscer (羽毛)   2015-03-04 23:23:00
OSX 10.10 mbpr 13' RAM: 16GB,感谢前辈!
作者: andrew43 (讨厌有好心推文后删文者)   2015-03-04 23:32:00
开Activity Monitor, 选Memory,看Swap used正常情况这个量只有几MB,超过就是爆了。
楼主: squallscer (羽毛)   2015-03-05 01:03:00
刚刚在做GB left_join GB,swap跑到123mb... 过阵子R sR session aborted
作者: andrew43 (讨厌有好心推文后删文者)   2015-03-05 01:12:00
swap用百MB应该都还好。R结束是被你结束还是自动结束的?
楼主: squallscer (羽毛)   2015-03-05 01:14:00
跑到跳掉@@我正在跑第二次
作者: Wush978 (拒看低质媒体)   2015-03-05 07:35:00
16gb 有 3gb应该很ok, 你可以把内存交给R 自己处理用data.table的特色是可以在memory中建index加速存取你有适当的建index吗?
楼主: squallscer (羽毛)   2015-03-05 17:10:00
我有两个data.table档,Row:2000万笔左右 Col:6,index都建在id,试过两个
作者: andrew43 (讨厌有好心推文后删文者)   2015-03-05 17:17:00
不知道原po要做的分析,改到database里做可不可能?不过还要多做不少工作,还要再写sql。
楼主: squallscer (羽毛)   2015-03-05 17:31:00
试过两个语法 ex:dplyr::left_join & Data[,list..]这两个都阵亡!,回a大,小弟因不熟MSSQL的语法所以才load进R来做,也想借机会看看R的发挥性,我在找找看其他方法, 有更有效率的方式我在回复文章!谢谢两位前辈!
作者: Wush978 (拒看低质媒体)   2015-03-05 17:58:00
index做在left_join的by看看呢?
楼主: squallscer (羽毛)   2015-03-05 18:08:00
我left_join的by就是放index了~

Links booklink

Contact Us: admin [ a t ] ucptt.com