文章分類提示:
- 問題: 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看看呢?