我想在R Shiny中使用this方法(具有数百万行的renderDT()
方法)在R Shiny中进行SparkDataFrame
(延迟呈现具有数百万行的数据表)。我也希望能够应用全局过滤器或列过滤器。我没有在R中找到执行此操作的任何资源,而且无法在第一个链接处将Ajax转换为R代码。这是我到目前为止的内容:
server.R
library(shiny)
# Connect to Spark outside the shinyServer() method
library(SparkR, lib.loc = c(file.path(Sys.getenv("SPARK_HOME"), "R", "lib")))
sparkR.session(master = "local[*]")
# Define server logic
shinyServer(function(input, output, session) {
output$myTable <- renderDT(
# get the SparkDataFrame from HDFS; collect() converts SparkDataFrame -> data.frame
collect(read.df(paste("hdfs://localhost:9000", input$path, sep=""), input$type))
)
})
ui.R
library(shiny)
library(DT)
# Define UI for application that draws a data table
shinyUI(fluidPage(
# Application title
titlePanel("Simple SparkDataFrame Example"),
# Sidebar with a text input for the filename
sidebarLayout(
sidebarPanel(
textInput("path",
"HDFS File Path:",
"/big_data/example_SQL/684c9b31-892c-48c5-8574-9dd61a9d7e78.parquet"
),
textInput("type",
"HDFS File Type:",
"parquet"
)
),
# Show the table
mainPanel(
dataTableOutput("myTable")
)
)
))
我目前遇到的主要问题是renderDT()
需要R data.frame
,因此我正在使用SparkR的collect()
方法读取整个{{1} }进入内存,这远非理想。谁能帮我解决这个问题?
我找到了extensions到R DataTables,所以我用垂直滚动条重新格式化了表格,如下所示:
SparkDataFrame
但是我仍在使用 output$myTable <- renderDT(
# get the SparkDataFrame from HDFS; collect() converts SparkDataFrame -> data.frame
collect(read.df(paste("hdfs://localhost:9000", input$path, sep=""), input$type)),
extensions = "Scroller",
options=list(
deferRender = TRUE,
scroller = TRUE,
scrollY = 500 # height in pixels
)
)
将collect()
转换为SparkDataFrame
,我想避免这种情况。 其他问题:如何在R中启用data.frame
?
我认为它与此处的ajax()方法有关,但是我无法将其转换为R代码或将其解释为R中的JavaScript。
经过艰苦的努力,我设法获得了大约80%的jQuery和20%的R的MWE。这重现了this link的行为,但是这样做基本上没有R代码,这不是我想要什么:
scroller.loadingIndicator