[問題] shiny讀取大檔案csv會當機

看板R_Language作者 (Esme)時間6年前 (2017/10/21 21:42), 編輯推噓4(4050)
留言54則, 5人參與, 6年前最新討論串1/2 (看更多)
文章分類提示: - 問題:shiny [問題類型]: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) [軟體熟悉度]: 入門(寫過其他程式,只是對語法不熟悉) [問題敘述]: 我做了一個shiny讀取歷年資料的程式 可是我的csv檔案有2gb大 發現讀取可以,可是要用shiny+套件時就會當機 如果不用shiny就可以正常繪圖了 有人建議我用mysql可是我把資料弄進mysql,mysql就當機了 檔案太大嗎??只有2g阿 到底要怎麼用才能正常在shiny上跑呢 我的記憶體有16g 我是不是要用甚麼spark hadoop的就會跑得出來 而且後端檔案有2g大網站要怎麼做呢 shinyapps.io好像不可能... [程式範例]: library(leaflet) library(shiny) library(shinydashboard) library(readr) library(methods) library(DT) library(RCurl) alldata_2010 <- read_csv("alldata_test.csv", col_types = cols(PM2.5 = col_number(), year = col_character(), month = col_character(), day = col_character(), hour = col_character())) ui <- fluidPage( titlePanel("Basic DataTable"), fluidRow( column(4, selectInput("year", "year:", alldata_2010, selectize=TRUE) ), column(4, selectInput("month", "month:", alldata_2010, selectize=TRUE) ), column(4, selectInput("day", "day:", alldata_2010, selectize=TRUE) ), column(4, selectInput("hour", "hour:", alldata_2010, selectize=TRUE) ), fluidRow( title = "data MAP", collapsible = TRUE, width = "100%", height = "100%", leafletOutput("datamap", height = "900px") ) ) ) server <- function(input, output) { output$datamap <- renderLeaflet({ data <- alldata_2010 if (input$year != "all") { data <- data[data$year == input$year,] } if (input$month != "All") { data <- data[data$month == input$month,] } if (input$day != "All") { data <- data[data$day == input$day,] } if (input$hour != "All") { data <- data[data$hour == input$hour,] } cPal <- colorNumeric(palette = c("green","orange","red","purple"),domain = 0:100) leaflet(taiwan) %>%addProviderTiles(providers$CartoDB.Positron) %>% addPolygons(color = "#444444", weight = 1.5, smoothFactor = 1.5, opacity = 1.5, fillOpacity = 0.1) %>% addCircleMarkers(lng=data$TWD97Lon,lat=data$TWD97Lat, radius=13,stroke=FALSE, fillOpacity = 0.9, fillColor = ~cPal(data$PM2.5), label =~as.character(data$PM2.5), popup = ~as.character(data$site))%>% addLegend("bottomright", pal = cPal, values =data$PM2.5,title = "PM2.5", labFormat = labelFormat(suffix = " "),opacity = 1) } ) } shinyApp(ui = ui, server = server) [環境敘述]: R version 3.3.3 windows 10 記憶體16gb [關鍵字]:shiny 資料大 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.132.6.162 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1508593359.A.BE4.html

10/21 21:55, 6年前 , 1F
你有打算自己架shiny server嗎
10/21 21:55, 1F

10/21 21:55, 6年前 , 2F
另外 mysql不可能存2GB就死了...
10/21 21:55, 2F

10/21 21:56, 6年前 , 3F
最好的架構應該是直接架一台linux server
10/21 21:56, 3F

10/21 21:56, 6年前 , 4F
用MariaDB存資料,需要的資料在撈出來畫圖就好
10/21 21:56, 4F

10/21 22:03, 6年前 , 5F
要怎麼自己架server,我還在研究
10/21 22:03, 5F

10/21 22:04, 6年前 , 6F
請問就是直接架一台linux server就不會造成當機了嗎
10/21 22:04, 6F

10/21 22:06, 6年前 , 7F
Windows的application 我是比較不信他XD
10/21 22:06, 7F

10/21 22:06, 6年前 , 8F
我目前光挑選csv中的資料就會很慢
10/21 22:06, 8F

10/21 22:06, 6年前 , 9F
但是MySQL應該沒那麼脆弱,你可能還是找找看
10/21 22:06, 9F

10/21 22:06, 6年前 , 10F
問題在哪
10/21 22:06, 10F

10/21 22:06, 6年前 , 11F
SQL DB可以用Index加快搜尋速度
10/21 22:06, 11F

10/21 22:07, 6年前 , 12F
我家電腦沒有linux. 哭
10/21 22:07, 12F

10/21 22:07, 6年前 , 13F
csv資料篩選可以用data.table套件加速 設keys
10/21 22:07, 13F

10/21 22:07, 6年前 , 14F
看你到底是什麼用途...
10/21 22:07, 14F

10/21 22:07, 6年前 , 15F
我只是推一個最好的架構 並非一定要那樣做
10/21 22:07, 15F

10/21 22:13, 6年前 , 16F
這程式就是選擇幾年幾日幾時的數據,有二十年之長,如果
10/21 22:13, 16F

10/21 22:13, 6年前 , 17F
弄成一個月是沒問題,但我很需要長的資料啊
10/21 22:13, 17F

10/21 22:15, 6年前 , 18F
資料庫是最好的選擇
10/21 22:15, 18F

10/21 22:16, 6年前 , 19F
你不如去請教為什麼MySQL會死可能比較快XD
10/21 22:16, 19F

10/21 22:16, 6年前 , 20F
我再看看mysql好了,如果shiny跟mysql做連結,會不會跑
10/21 22:16, 20F

10/21 22:16, 6年前 , 21F
的比較快?
10/21 22:16, 21F

10/21 22:17, 6年前 , 22F
mysql建好table要記得給index應該就沒問題了
10/21 22:17, 22F

10/21 22:18, 6年前 , 23F
我好像看出來你為什麼單純2GB資料記憶體就吃不消的
10/21 22:18, 23F

10/21 22:18, 6年前 , 24F
問題了...
10/21 22:18, 24F

10/21 22:18, 6年前 , 25F
我回個文好了
10/21 22:18, 25F

10/21 23:01, 6年前 , 26F
我有整理架設shiny server的流程 站內你
10/21 23:01, 26F

10/22 00:06, 6年前 , 27F
謝謝大大了,我會再研究看看
10/22 00:06, 27F

10/22 12:44, 6年前 , 28F
你的作業系統是 32- or 64-bit? 你的 R 執行檔是 32-
10/22 12:44, 28F

10/22 12:44, 6年前 , 29F
or 64-bit build?
10/22 12:44, 29F

10/22 12:55, 6年前 , 30F
Platform: x86_64-w64-mingw32/x64 (64-bit)
10/22 12:55, 30F

10/22 12:55, 6年前 , 31F
所以應該是64 ?
10/22 12:55, 31F

10/22 13:11, 6年前 , 32F
你這應該還是windows作業系統的問題,你可以看一下
10/22 13:11, 32F

10/22 13:11, 6年前 , 33F

10/22 13:12, 6年前 , 34F
e/html/Memory-limits.html (抱歉沒縮網址)
10/22 13:12, 34F

10/22 13:13, 6年前 , 35F
雖然OS和Apps都是64 bit 但是底下有一句話
10/22 13:13, 35F

10/22 13:13, 6年前 , 36F
"It is not normally possible to allocate as much
10/22 13:13, 36F

10/22 13:13, 6年前 , 37F
as 2Gb to a single vector in a 32-bit build of R
10/22 13:13, 37F

10/22 13:15, 6年前 , 38F
修改過memory.limit造成windows當機,我等等上傳csv
10/22 13:15, 38F

10/22 13:15, 6年前 , 39F
... 貼到一半我發現我看錯了..
10/22 13:15, 39F

10/22 13:15, 6年前 , 40F
原則上 64-bit Apps on 64-bit OS 應該沒問題..
10/22 13:15, 40F

10/22 13:16, 6年前 , 41F
但你的錯誤訊息 cannot allocate vector of size ...
10/22 13:16, 41F

10/22 13:17, 6年前 , 42F
看起來是 OS 不給memory
10/22 13:17, 42F

10/22 13:23, 6年前 , 43F
還要再要 93 MB 的時候失敗了
10/22 13:23, 43F

10/22 13:31, 6年前 , 44F
10/22 13:31, 44F

10/22 13:31, 6年前 , 45F
有沒有不需要記憶體的方法阿
10/22 13:31, 45F

10/22 13:52, 6年前 , 46F
"cannot allocate vector of size N" 指的是不能繼續
10/22 13:52, 46F

10/22 13:53, 6年前 , 47F
取得"連續的"記憶體區塊
10/22 13:53, 47F

10/22 15:35, 6年前 , 48F
我把二十年改成十年就可以讀取了!
10/22 15:35, 48F

10/22 20:16, 6年前 , 49F
滿好奇原PO資料是幾個欄位,共有幾個row?
10/22 20:16, 49F

10/23 13:44, 6年前 , 50F
2gb應該不會是data.table or SQL的阻礙.如果檔案只查不改
10/23 13:44, 50F

10/23 13:45, 6年前 , 51F
也可以做前處理,自己依欄位屬性切成較小的檔案..如果
10/23 13:45, 51F

10/23 13:46, 6年前 , 52F
欄位屬性不複雜 也可以考慮bigmemory #1NaPhu9c
10/23 13:46, 52F

10/23 13:48, 6年前 , 53F
不過以文中看來,用成關聯資料庫 取出資料應該最直接,,,
10/23 13:48, 53F

10/24 22:41, 6年前 , 54F
我會再研究sql的,謝謝大家熱心幫忙
10/24 22:41, 54F
文章代碼(AID): #1PwqxFla (R_Language)
文章代碼(AID): #1PwqxFla (R_Language)