【问题标题】:Groupby Multiple Columns using an input vector SparkR使用输入向量 SparkR 的 Groupby 多列
【发布时间】:2018-07-12 04:59:00
【问题描述】:

我正在使用 SparkR 2.1.0 进行数据操作

我想以编程方式按多列分组。我知道如果我单独列出它们,我可以按多列分组,或者从向量中引用它们的位置......但我希望能够将列列表作为向量传递(这样,函数会自动调整为我传递的参数数量)

虚拟数据:

 cpny <- c("Fakeco1", "Fakeco2", "Fakeco3", "Fakeco4", "Fakeco5", "Fakeco6")
 state <- c("CA", "NY", "WA", "CA", "CA", "NY")
 public <- c("Y", "Y", "N", "N", "N", "N")
 color <- c("White", "Red", "Green", "Green", "Green", "Red")
 revs <- c(400, 200, 900, 500, 200, 120)
 df <- data.frame(cpny, state, public, color, revs)
 # Convert to SparkR dataframe
 df_s <- as.DataFrame(df)    

作品:

  df_grouped <- df_s %>%
  groupBy('state', 'public') %>%
  summarize(sum_Revs = sum(df_s$revs))

也有效:

  group_vars <- c('state', 'public')

  df_grouped <- df_s %>%
  groupBy(group_vars[[1]], group_vars[[2]]) %>%
  summarize(sum_Revs = sum(df_s$revs))

不起作用:

  group_vars <- c('state', 'public')

  df_grouped <- df_s %>%
  groupBy(group_vars) %>%
  summarize(sum_Revs = sum(df_s$revs))

任何解决方案或替代想法?

【问题讨论】:

    标签: r sparkr


    【解决方案1】:

    您可以使用 do.call() https://stat.ethz.ch/R-manual/R-devel/library/base/html/do.call.html 并将您的列以及数据框放入列表中。以下对我有用:

    cpny <- c("Fakeco1", "Fakeco2", "Fakeco3", "Fakeco4", "Fakeco5", "Fakeco6")
    state <- c("CA", "NY", "WA", "CA", "CA", "NY")
    public <- c("Y", "Y", "N", "N", "N", "N")
    color <- c("White", "Red", "Green", "Green", "Green", "Red")
    revs <- c(400, 200, 900, 500, 200, 120)
    df <- data.frame(cpny, state, public, color, revs)
    # Convert to SparkR dataframe
    df_s <- as.DataFrame(df)  
    
    group_vars <- c('state', 'public')
    
    
    function_params <- list(df_s)
    for (i in range(1:length(group_vars))) {
        function_params[[i+1]] <- group_vars[i]
    }
    
    summarized<- do.call(SparkR::groupBy, function_params) %>%  SparkR::summarize(sum_Revs = sum(df_s$revs))
    SparkR::head(summarized)
    

    【讨论】:

    • 另一种选择(更简洁一点)是写summarized &lt;- do.call(SparkR::groupBy, unlist(list(df_s, group_vars))) %&gt;% ...
    猜你喜欢
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 2022-07-19
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    相关资源
    最近更新 更多