[問題] data.table可以操作的資料量

看板R_Language作者 (羽毛)時間9年前 (2015/03/03 23:33), 編輯推噓2(2044)
留言46則, 4人參與, 最新討論串1/1
文章分類提示: - 問題: 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://www.ptt.cc/bbs/R_Language/M.1425396782.A.746.html

03/04 00:36, , 1F
讀入後你將進行什麼操作或分析?
03/04 00:36, 1F

03/04 01:20, , 2F
我剛測一下,data.frame(runif(1.25e+08)) 用了快1GB,
03/04 01:20, 2F

03/04 01:20, , 3F
但 data.tabe(runif(1.25e+08)) 用了快2GB。
03/04 01:20, 3F

03/04 01:20, , 4F
aggregation,filter,grouping,新增欄位,還有一些些的
03/04 01:20, 4F

03/04 01:21, , 5F
ETL,最後是要產出一個352X352的列聯表
03/04 01:21, 5F

03/04 01:21, , 6F
什麼原因我不清楚……但data.frame並沒看到多浪費ram。
03/04 01:21, 6F

03/04 01:23, , 7F
你可以先造假資料做做看。
03/04 01:23, 7F

03/04 01:24, , 8F
大不了進swap,比較慢罷了。還不行再改用其它方法。
03/04 01:24, 8F

03/04 01:28, , 9F
那篇文章為"記憶體不足"的回文中看到的~
03/04 01:28, 9F

03/04 01:29, , 10F
好的!謝謝
03/04 01:29, 10F

03/04 01:30, , 11F
另外,你說3GB資料,是指文字檔案大小還是浮點數?
03/04 01:30, 11F

03/04 01:31, , 12F
多數的column皆為文字資料
03/04 01:31, 12F

03/04 01:31, , 13F
評估時應該換算成實際ram裡頭的資料型態,會準一點。
03/04 01:31, 13F

03/04 01:32, , 14F
純文字的話,和3GB大概不會差太多了。
03/04 01:32, 14F

03/04 01:33, , 15F
意思是在R裡看他所佔的記憶體大小嗎?
03/04 01:33, 15F

03/04 01:35, , 16F
嗯,也可以這樣說啦。我只是想到"1"是1B但1.0是8B的差別
03/04 01:35, 16F

03/04 08:17, , 17F
推文不解釋
03/04 08:17, 17F

03/04 19:50, , 18F
兩倍的說法來自於R的實作是copy on write,所以兩倍比較
03/04 19:50, 18F

03/04 19:50, , 19F
安全。否則你一修改物件,就進swap了
03/04 19:50, 19F

03/04 19:52, , 20F
這只是一個rule of thumb,實際還是和你的操作有關
03/04 19:52, 20F

03/04 19:53, , 21F
data.table能處理的資料量和電腦的記憶體比較有關
03/04 19:53, 21F

03/04 19:54, , 22F
個人經驗是只要不進swap, 10g ~ 30g 的資料跑的動的
03/04 19:54, 22F

03/04 21:54, , 23F
有什麼方法知道進入swap呢,電腦ram為16gb,3gb左右用d
03/04 21:54, 23F

03/04 21:54, , 24F
atatable處理起來還是要滿久~
03/04 21:54, 24F

03/04 22:16, , 25F
什麼作業系統呢?
03/04 22:16, 25F

03/04 23:23, , 26F
OSX 10.10 mbpr 13' RAM: 16GB,感謝前輩!
03/04 23:23, 26F

03/04 23:32, , 27F
開Activity Monitor, 選Memory,看Swap used
03/04 23:32, 27F

03/04 23:34, , 28F
正常情況這個量只有幾MB,超過就是爆了。
03/04 23:34, 28F

03/05 01:03, , 29F
剛剛在做GB left_join GB,swap跑到123mb... 過陣子R s
03/05 01:03, 29F

03/05 01:03, , 30F
R session aborted
03/05 01:03, 30F

03/05 01:12, , 31F
swap用百MB應該都還好。R結束是被你結束還是自動結束的?
03/05 01:12, 31F

03/05 01:14, , 32F
跑到跳掉@@我正在跑第二次
03/05 01:14, 32F

03/05 07:35, , 33F
16gb 有 3gb應該很ok, 你可以把記憶體交給R 自己處理
03/05 07:35, 33F

03/05 07:35, , 34F
03/05 07:35, 34F

03/05 07:36, , 35F
data.table的特色是可以在memory中建index加速存取
03/05 07:36, 35F

03/05 07:36, , 36F
你有適當的建index嗎?
03/05 07:36, 36F

03/05 17:10, , 37F
我有兩個data.table檔,
03/05 17:10, 37F

03/05 17:13, , 38F
Row:2000萬筆左右 Col:6,index都建在id,試過兩個
03/05 17:13, 38F

03/05 17:17, , 39F
不知道原po要做的分析,改到database裡做可不可能?
03/05 17:17, 39F

03/05 17:18, , 40F
不過還要多做不少工作,還要再寫sql。
03/05 17:18, 40F

03/05 17:31, , 41F
試過兩個語法 ex:dplyr::left_join & Data[,list..]
03/05 17:31, 41F

03/05 17:32, , 42F
這兩個都陣亡!,回a大,小弟因不熟MSSQL的語法所以才
03/05 17:32, 42F

03/05 17:33, , 43F
load進R來做,也想藉機會看看R的發揮性,我在找找看其他
03/05 17:33, 43F

03/05 17:34, , 44F
方法, 有更有效率的方式我在回復文章!謝謝兩位前輩!
03/05 17:34, 44F

03/05 17:58, , 45F
index做在left_join的by看看呢?
03/05 17:58, 45F

03/05 18:08, , 46F
我left_join的by就是放index了~
03/05 18:08, 46F
文章代碼(AID): #1KzTGkT6 (R_Language)
文章代碼(AID): #1KzTGkT6 (R_Language)