作者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/cn.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