看板 R_Language 關於我們 聯絡資訊
文章分類提示: - 問題: 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
andrew43: 讀入後你將進行什麼操作或分析? 03/04 00:36
andrew43: 我剛測一下,data.frame(runif(1.25e+08)) 用了快1GB, 03/04 01:20
andrew43: 但 data.tabe(runif(1.25e+08)) 用了快2GB。 03/04 01:20
squallscer: aggregation,filter,grouping,新增欄位,還有一些些的 03/04 01:20
squallscer: ETL,最後是要產出一個352X352的列聯表 03/04 01:21
andrew43: 什麼原因我不清楚……但data.frame並沒看到多浪費ram。 03/04 01:21
andrew43: 你可以先造假資料做做看。 03/04 01:23
andrew43: 大不了進swap,比較慢罷了。還不行再改用其它方法。 03/04 01:24
squallscer: 那篇文章為"記憶體不足"的回文中看到的~ 03/04 01:28
squallscer: 好的!謝謝 03/04 01:29
andrew43: 另外,你說3GB資料,是指文字檔案大小還是浮點數? 03/04 01:30
squallscer: 多數的column皆為文字資料 03/04 01:31
andrew43: 評估時應該換算成實際ram裡頭的資料型態,會準一點。 03/04 01:31
andrew43: 純文字的話,和3GB大概不會差太多了。 03/04 01:32
squallscer: 意思是在R裡看他所佔的記憶體大小嗎? 03/04 01:33
andrew43: 嗯,也可以這樣說啦。我只是想到"1"是1B但1.0是8B的差別 03/04 01:35
lofu: 推文不解釋 03/04 08:17
Wush978: 兩倍的說法來自於R的實作是copy on write,所以兩倍比較 03/04 19:50
Wush978: 安全。否則你一修改物件,就進swap了 03/04 19:50
Wush978: 這只是一個rule of thumb,實際還是和你的操作有關 03/04 19:52
Wush978: data.table能處理的資料量和電腦的記憶體比較有關 03/04 19:53
Wush978: 個人經驗是只要不進swap, 10g ~ 30g 的資料跑的動的 03/04 19:54
squallscer: 有什麼方法知道進入swap呢,電腦ram為16gb,3gb左右用d 03/04 21:54
squallscer: atatable處理起來還是要滿久~ 03/04 21:54
andrew43: 什麼作業系統呢? 03/04 22:16
squallscer: OSX 10.10 mbpr 13' RAM: 16GB,感謝前輩! 03/04 23:23
andrew43: 開Activity Monitor, 選Memory,看Swap used 03/04 23:32
andrew43: 正常情況這個量只有幾MB,超過就是爆了。 03/04 23:34
squallscer: 剛剛在做GB left_join GB,swap跑到123mb... 過陣子R s 03/05 01:03
squallscer: R session aborted 03/05 01:03
andrew43: swap用百MB應該都還好。R結束是被你結束還是自動結束的? 03/05 01:12
squallscer: 跑到跳掉@@我正在跑第二次 03/05 01:14
Wush978: 16gb 有 3gb應該很ok, 你可以把記憶體交給R 自己處理 03/05 07:35
Wush978: 用 03/05 07:35
Wush978: data.table的特色是可以在memory中建index加速存取 03/05 07:36
Wush978: 你有適當的建index嗎? 03/05 07:36
squallscer: 我有兩個data.table檔, 03/05 17:10
squallscer: Row:2000萬筆左右 Col:6,index都建在id,試過兩個 03/05 17:13
andrew43: 不知道原po要做的分析,改到database裡做可不可能? 03/05 17:17
andrew43: 不過還要多做不少工作,還要再寫sql。 03/05 17:18
squallscer: 試過兩個語法 ex:dplyr::left_join & Data[,list..] 03/05 17:31
squallscer: 這兩個都陣亡!,回a大,小弟因不熟MSSQL的語法所以才 03/05 17:32
squallscer: load進R來做,也想藉機會看看R的發揮性,我在找找看其他 03/05 17:33
squallscer: 方法, 有更有效率的方式我在回復文章!謝謝兩位前輩! 03/05 17:34
Wush978: index做在left_join的by看看呢? 03/05 17:58
squallscer: 我left_join的by就是放index了~ 03/05 18:08