作者squallscer (羽毛)
看板R_Language
标题[问题] data.table可以操作的资料量
时间Tue Mar 3 23:33:00 2015
文章分类提示:
- 问题: data.table可以操作多大的资料量?
[问题类型]:
效能谘询(我想让R 跑更快)
[软体熟悉度]:
入门(写过其他程式,只是对语法不熟悉)
[问题叙述]:
小弟最近有一个差不多3GB的dataset
目前是想将此dataset input到R中利用data.table操作资料
但未来可能会有更大的资料量需要操作
所以想询问一下版上的各位大大
(1)过去有利用data.table套件操作多大的资料量呢?
过去版上有一篇文章有讨论到data.frame使用到dataset两倍的记忆体量
(2)那麽data.table是否也有这样的问题呢?
(3)dataset的大小是否也会受限於电脑Ram的大小呢?
最近资料量实在困扰到小弟!
感谢各位前辈耐心看完!
[关键字]:
data.table
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.119.125.136
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1425396782.A.746.html
1F:→ andrew43: 读入後你将进行什麽操作或分析? 03/04 00:36
2F:→ andrew43: 我刚测一下,data.frame(runif(1.25e+08)) 用了快1GB, 03/04 01:20
3F:推 andrew43: 但 data.tabe(runif(1.25e+08)) 用了快2GB。 03/04 01:20
4F:→ squallscer: aggregation,filter,grouping,新增栏位,还有一些些的 03/04 01:20
5F:→ squallscer: ETL,最後是要产出一个352X352的列联表 03/04 01:21
6F:→ andrew43: 什麽原因我不清楚……但data.frame并没看到多浪费ram。 03/04 01:21
7F:→ andrew43: 你可以先造假资料做做看。 03/04 01:23
8F:→ andrew43: 大不了进swap,比较慢罢了。还不行再改用其它方法。 03/04 01:24
9F:→ squallscer: 那篇文章为"记忆体不足"的回文中看到的~ 03/04 01:28
10F:→ squallscer: 好的!谢谢 03/04 01:29
11F:→ andrew43: 另外,你说3GB资料,是指文字档案大小还是浮点数? 03/04 01:30
12F:→ squallscer: 多数的column皆为文字资料 03/04 01:31
13F:→ andrew43: 评估时应该换算成实际ram里头的资料型态,会准一点。 03/04 01:31
14F:→ andrew43: 纯文字的话,和3GB大概不会差太多了。 03/04 01:32
15F:→ squallscer: 意思是在R里看他所占的记忆体大小吗? 03/04 01:33
16F:→ andrew43: 嗯,也可以这样说啦。我只是想到"1"是1B但1.0是8B的差别 03/04 01:35
17F:推 lofu: 推文不解释 03/04 08:17
18F:→ Wush978: 两倍的说法来自於R的实作是copy on write,所以两倍比较 03/04 19:50
19F:→ Wush978: 安全。否则你一修改物件,就进swap了 03/04 19:50
20F:→ Wush978: 这只是一个rule of thumb,实际还是和你的操作有关 03/04 19:52
21F:→ Wush978: data.table能处理的资料量和电脑的记忆体比较有关 03/04 19:53
22F:→ Wush978: 个人经验是只要不进swap, 10g ~ 30g 的资料跑的动的 03/04 19:54
23F:→ squallscer: 有什麽方法知道进入swap呢,电脑ram为16gb,3gb左右用d 03/04 21:54
24F:→ squallscer: atatable处理起来还是要满久~ 03/04 21:54
25F:→ andrew43: 什麽作业系统呢? 03/04 22:16
26F:→ squallscer: OSX 10.10 mbpr 13' RAM: 16GB,感谢前辈! 03/04 23:23
27F:→ andrew43: 开Activity Monitor, 选Memory,看Swap used 03/04 23:32
28F:→ andrew43: 正常情况这个量只有几MB,超过就是爆了。 03/04 23:34
29F:→ squallscer: 刚刚在做GB left_join GB,swap跑到123mb... 过阵子R s 03/05 01:03
30F:→ squallscer: R session aborted 03/05 01:03
31F:→ andrew43: swap用百MB应该都还好。R结束是被你结束还是自动结束的? 03/05 01:12
32F:→ squallscer: 跑到跳掉@@我正在跑第二次 03/05 01:14
33F:→ Wush978: 16gb 有 3gb应该很ok, 你可以把记忆体交给R 自己处理 03/05 07:35
34F:→ Wush978: 用 03/05 07:35
35F:→ Wush978: data.table的特色是可以在memory中建index加速存取 03/05 07:36
36F:→ Wush978: 你有适当的建index吗? 03/05 07:36
37F:→ squallscer: 我有两个data.table档, 03/05 17:10
38F:→ squallscer: Row:2000万笔左右 Col:6,index都建在id,试过两个 03/05 17:13
39F:→ andrew43: 不知道原po要做的分析,改到database里做可不可能? 03/05 17:17
40F:→ andrew43: 不过还要多做不少工作,还要再写sql。 03/05 17:18
41F:→ squallscer: 试过两个语法 ex:dplyr::left_join & Data[,list..] 03/05 17:31
42F:→ squallscer: 这两个都阵亡!,回a大,小弟因不熟MSSQL的语法所以才 03/05 17:32
43F:→ squallscer: load进R来做,也想藉机会看看R的发挥性,我在找找看其他 03/05 17:33
44F:→ squallscer: 方法, 有更有效率的方式我在回复文章!谢谢两位前辈! 03/05 17:34
45F:→ Wush978: index做在left_join的by看看呢? 03/05 17:58
46F:→ squallscer: 我left_join的by就是放index了~ 03/05 18:08