看板 R_Language 關於我們 聯絡資訊
文章分類提示: - 問題: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
celestialgod: 你有打算自己架shiny server嗎 10/21 21:55
celestialgod: 另外 mysql不可能存2GB就死了... 10/21 21:55
celestialgod: 最好的架構應該是直接架一台linux server 10/21 21:56
celestialgod: 用MariaDB存資料,需要的資料在撈出來畫圖就好 10/21 21:56
Esmelee: 要怎麼自己架server,我還在研究 10/21 22:03
Esmelee: 請問就是直接架一台linux server就不會造成當機了嗎 10/21 22:04
celestialgod: Windows的application 我是比較不信他XD 10/21 22:06
Esmelee: 我目前光挑選csv中的資料就會很慢 10/21 22:06
celestialgod: 但是MySQL應該沒那麼脆弱,你可能還是找找看 10/21 22:06
celestialgod: 問題在哪 10/21 22:06
celestialgod: SQL DB可以用Index加快搜尋速度 10/21 22:06
Esmelee: 我家電腦沒有linux. 哭 10/21 22:07
celestialgod: csv資料篩選可以用data.table套件加速 設keys 10/21 22:07
celestialgod: 看你到底是什麼用途... 10/21 22:07
celestialgod: 我只是推一個最好的架構 並非一定要那樣做 10/21 22:07
Esmelee: 這程式就是選擇幾年幾日幾時的數據,有二十年之長,如果 10/21 22:13
Esmelee: 弄成一個月是沒問題,但我很需要長的資料啊 10/21 22:13
celestialgod: 資料庫是最好的選擇 10/21 22:15
celestialgod: 你不如去請教為什麼MySQL會死可能比較快XD 10/21 22:16
Esmelee: 我再看看mysql好了,如果shiny跟mysql做連結,會不會跑 10/21 22:16
Esmelee: 的比較快? 10/21 22:16
celestialgod: mysql建好table要記得給index應該就沒問題了 10/21 22:17
celestialgod: 我好像看出來你為什麼單純2GB資料記憶體就吃不消的 10/21 22:18
celestialgod: 問題了... 10/21 22:18
celestialgod: 我回個文好了 10/21 22:18
HumuHumu: 我有整理架設shiny server的流程 站內你 10/21 23:01
Esmelee: 謝謝大大了,我會再研究看看 10/22 00:06
bluecadence: 你的作業系統是 32- or 64-bit? 你的 R 執行檔是 32- 10/22 12:44
bluecadence: or 64-bit build? 10/22 12:44
Esmelee: Platform: x86_64-w64-mingw32/x64 (64-bit) 10/22 12:55
Esmelee: 所以應該是64 ? 10/22 12:55
bluecadence: 你這應該還是windows作業系統的問題,你可以看一下 10/22 13:11
bluecadence: e/html/Memory-limits.html (抱歉沒縮網址) 10/22 13:12
bluecadence: 雖然OS和Apps都是64 bit 但是底下有一句話 10/22 13:13
bluecadence: "It is not normally possible to allocate as much 10/22 13:13
bluecadence: as 2Gb to a single vector in a 32-bit build of R 10/22 13:13
Esmelee: 修改過memory.limit造成windows當機,我等等上傳csv 10/22 13:15
bluecadence: ... 貼到一半我發現我看錯了.. 10/22 13:15
bluecadence: 原則上 64-bit Apps on 64-bit OS 應該沒問題.. 10/22 13:15
bluecadence: 但你的錯誤訊息 cannot allocate vector of size ... 10/22 13:16
bluecadence: 看起來是 OS 不給memory 10/22 13:17
bluecadence: 還要再要 93 MB 的時候失敗了 10/22 13:23
Esmelee: csv 下載 https://goo.gl/R1yvKs 10/22 13:31
Esmelee: 有沒有不需要記憶體的方法阿 10/22 13:31
bluecadence: "cannot allocate vector of size N" 指的是不能繼續 10/22 13:52
bluecadence: 取得"連續的"記憶體區塊 10/22 13:53
Esmelee: 我把二十年改成十年就可以讀取了! 10/22 15:35
celestialgod: 滿好奇原PO資料是幾個欄位,共有幾個row? 10/22 20:16
cywhale: 2gb應該不會是data.table or SQL的阻礙.如果檔案只查不改 10/23 13:44
cywhale: 也可以做前處理,自己依欄位屬性切成較小的檔案..如果 10/23 13:45
cywhale: 欄位屬性不複雜 也可以考慮bigmemory #1NaPhu9c 10/23 13:46
cywhale: 不過以文中看來,用成關聯資料庫 取出資料應該最直接,,, 10/23 13:48
Esmelee: 我會再研究sql的,謝謝大家熱心幫忙 10/24 22:41