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