作者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/m.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