[问题] shiny读取大档案csv会当机

楼主: Esmelee (Esme)   2017-10-21 21:42:37
文章分类提示:
- 问题: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 资料大
作者: celestialgod (天)   2017-10-21 21:55:00
你有打算自己架shiny server吗另外 mysql不可能存2GB就死了...最好的架构应该是直接架一台linux server用MariaDB存资料,需要的资料在捞出来画图就好
楼主: Esmelee (Esme)   2017-10-21 22:03:00
要怎么自己架server,我还在研究请问就是直接架一台linux server就不会造成当机了吗
作者: celestialgod (天)   2017-10-21 22:06:00
Windows的application 我是比较不信他XD
楼主: Esmelee (Esme)   2017-10-21 22:06:00
我目前光挑选csv中的资料就会很慢
楼主: Esmelee (Esme)   2017-10-21 22:07:00
我家电脑没有linux. 哭
作者: celestialgod (天)   2017-10-21 22:07:00
csv资料筛选可以用data.table套件加速 设keys看你到底是什么用途...我只是推一个最好的架构 并非一定要那样做
楼主: Esmelee (Esme)   2017-10-21 22:13:00
这程式就是选择几年几日几时的数据,有二十年之长,如果弄成一个月是没问题,但我很需要长的资料啊
作者: celestialgod (天)   2017-10-21 22:15:00
数据库是最好的选择你不如去请教为什么MySQL会死可能比较快XD
楼主: Esmelee (Esme)   2017-10-21 22:16:00
我再看看mysql好了,如果shiny跟mysql做连结,会不会跑的比较快?
作者: celestialgod (天)   2017-10-21 22:17:00
mysql建好table要记得给index应该就没问题了我好像看出来你为什么单纯2GB资料内存就吃不消的问题了...我回个文好了
作者: HumuHumu (呼姆呼姆)   2017-10-21 23:01:00
我有整理架设shiny server的流程 站内你
楼主: Esmelee (Esme)   2017-10-22 00:06:00
谢谢大大了,我会再研究看看
作者: bluecadence (Maxwell's demon)   2017-10-22 12:44:00
你的作业系统是 32- or 64-bit? 你的 R 执行档是 32-or 64-bit build?
楼主: Esmelee (Esme)   2017-10-22 12:55:00
Platform: x86_64-w64-mingw32/x64 (64-bit)所以应该是64 ?
作者: bluecadence (Maxwell's demon)   2017-10-22 13:11:00
你这应该还是windows作业系统的问题,你可以看一下https://stat.ethz.ch/R-manual/R-devel/library/base/html/Memory-limits.html (抱歉没缩网址)虽然OS和Apps都是64 bit 但是底下有一句话"It is not normally possible to allocate as muchas 2Gb to a single vector in a 32-bit build of R
楼主: Esmelee (Esme)   2017-10-22 13:15:00
修改过memory.limit造成windows当机,我等等上传csv
作者: bluecadence (Maxwell's demon)   2017-10-22 13:15:00
... 贴到一半我发现我看错了..原则上 64-bit Apps on 64-bit OS 应该没问题..但你的错误讯息 cannot allocate vector of size ...看起来是 OS 不给memory还要再要 93 MB 的时候失败了
楼主: Esmelee (Esme)   2017-10-22 13:31:00
csv 下载 https://goo.gl/R1yvKs有没有不需要内存的方法阿
作者: bluecadence (Maxwell's demon)   2017-10-22 13:52:00
"cannot allocate vector of size N" 指的是不能继续取得"连续的"内存区块
楼主: Esmelee (Esme)   2017-10-22 15:35:00
我把二十年改成十年就可以读取了!
作者: celestialgod (天)   2017-10-22 20:16:00
满好奇原PO资料是几个字段,共有几个row?
作者: cywhale (cywhale)   2017-10-23 13:44:00
2gb应该不会是data.table or SQL的阻碍.如果档案只查不改也可以做前处理,自己依字段属性切成较小的档案..如果字段属性不复杂 也可以考虑bigmemory #1NaPhu9c不过以文中看来,用成关联数据库 取出资料应该最直接,,,
楼主: Esmelee (Esme)   2017-10-24 22:41:00
我会再研究sql的,谢谢大家热心帮忙

Links booklink

Contact Us: admin [ a t ] ucptt.com