Как отправить визуализированные данные / строки таблицы Shiny App в таблицу в HBase / Hive? - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь создать приложение, в котором пользователь будет щелкать любую точку на графике, и каждая точка будет сохранена в таблице данных в виде R, а также отрисована.Пользователь может загрузить данные в файл CSV, но они будут сохранены на моем локальном компьютере.

Хочу ли я как-нибудь взять эту визуализированную таблицу и отправить ее в таблицу hive / HBase?Если это невозможно, то когда пользователь закрывает приложение.эта обработанная таблица может быть автоматически сохранена как CSV в моей файловой системе RStudio Server, а не сохранена на моем локальном компьютере.

до сих пор, приложение полностью функционально, и если пользователь нажимает на некоторые точки на графике.это заполнит стол.Затем пользователь может нажать на кнопку и загрузить таблицу в виде файла CSV.этот файл CSV хранится на моем локальном компьютере.Пожалуйста, обратитесь к коду.

    library(shiny)
    library(plotly)
    library(DT)

    d1=structure(list(Topic = c("compensation", "manager", "benefits",
                                "family", "communication", "worklifebalance", "perks", "compensation",
                                "benefits", "manager", "communication", "worklifebalance", "family",
                                "perks", "benefits", "compensation", "manager", "communication",
                                "family", "worklifebalance", "perks"),
                      variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L),
                                           .Label = c("Prct", "Count"), class = "factor"),
                      value = c(2.23121245555964, 0.723305136692411, 0.576192227534633,
                                0.202280250091946, 0.190020840995464, 0.153242613706019,
                                0.0122594090964816, 0.913705583756345, 0.609137055837563,
                                0.50761421319797, 0.50761421319797, 0.304568527918782, 0.203045685279188,
                                0, 1.49977276170277, 1.21193758521436, 0.893803969095592,
                                0.439327374640206, 0.348432055749129, 0.242387517042872,
                                0.0757460990758976),
                      group = c("APAC", "APAC", "APAC", "APAC",  "APAC", "APAC", "APAC",
                                "EMEA", "EMEA", "EMEA", "EMEA", "EMEA", "EMEA", "EMEA",
                                "AMERICAS", "AMERICAS", "AMERICAS", "AMERICAS", "AMERICAS",
                                "AMERICAS", "AMERICAS")),
                 .Names = c("Topic", "variable", "value", "group"), class = c("data.table", "data.frame"),
                 row.names = c(NA, -21L))


    javascript <- "
    function(el, x){
      el.on('plotly_click', function(data) {
        var colors = [];
        // check if color is a string or array
        if(typeof data.points[0].data.marker.color == 'string'){
          for (var i = 0; i < data.points[0].data.marker.color.length; i++) {
            colors.push(data.points[0].data.marker.color);
          }
        } else {
          colors = data.points[0].data.marker.color;
        }
        // some debugging
        //console.log(data.points[0].data.marker.color)
        //console.log(colors)

        // set color of selected point
        colors[data.points[0].pointNumber] = '#FF00FF';
        Plotly.restyle(el,
          {'marker':{color: colors}},
          [data.points[0].curveNumber]
        );
      });
    }"


    ui <- fluidPage(
      fluidRow(plotlyOutput('keywords')),
      fluidRow(verbatimTextOutput("selection")),
      fluidRow(DT::dataTableOutput("table1")),
      actionButton("rem_point", "Remove Last Point"),
      downloadButton('download',"Download the data")
    )   

    d0 = d1
    key <- row.names(d0)

    server = function(input,output){
      output$keywords = renderPlotly({


        d0 <- data.frame(d0, key)  

        p = ggplot(d0, aes(reorder(Topic,-value), value, key = key)) +
          geom_point(aes(colour = value),
                     shape = 16,
                     size = 3,
                     show.legend = F) +
          facet_wrap(~ group)+
          theme_minimal()
        ggplotly(p) %>% onRender(javascript)


      })


      d2 <- reactiveVal(data.frame())

      selection2 = reactive({
        s =  event_data("plotly_click")
        cat("You selected: \n\n")
        data.frame(s)
      })


      observeEvent(event_data("plotly_click"), {
        d2Temp <- rbind(
          d2(),
          d1 %>% filter(key == selection2()$key)
        )
        d2(d2Temp)
      })


      #values <- reactiveValues(dfWorking = d2())

      ## 4. remove row on actionButton click ##
      observeEvent(input$rem_point, {
        rem_row <- d2()[-nrow(d2()), ]
        d2(rem_row)

      })

      output$table1 = renderDT({
        d2()
      }) 

      output$download <- downloadHandler(
        filename = function(){"thename.csv"}, 
        content = function(fname){
          write.csv(d2(), fname)
        }
      )

    }

    shinyApp(ui, server)

Я ожидаю, что вместо этого CSV-файла будет храниться на моем / пользовательском локальном компьютере.это должно быть непосредственно отправлено в таблицу в HBase / Hive с использованием соединений ODBC?

Я также пытался использовать функцию изоляции, чтобы сделать реактивный фрейм данных неактивным, но у меня это не сработало.Я новичок в Shiny и R. Спасибо!

...