[問題] 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