【问题标题】:Rowwise calculation using SparkR使用 SparkR 的逐行计算
【发布时间】:2018-11-01 19:00:09
【问题描述】:

这是我的玩具数据框。

library(tibble); library(SparkR)

df <- tibble::tribble(
  ~var1, ~var2, ~maxofvar1var2,
  1L,    1L,    1L,
  2L,    1L,    2L,
  2L,    3L,    3L,
  NA,    2L,    2L,
  1L,    4L,    4L,
  8L,    5L,    8L)

df <- df %>% as.DataFrame()

如何使用 SparkR 计算行计算以获得 var1 和 var2 的最大值,如上面 df 中的第三个变量所示?如果 SparkR 中没有 rowwise 函数,我怎样才能得到想要的输出?

【问题讨论】:

    标签: r apache-spark sparkr


    【解决方案1】:

    一组列中的To get a maximum value 使用SparkR::greatest

    df %>% withColumn("maxOfVars", greatest(df$var1, df$var2))
    

    以及一般情况下的高阶函数,例如 aggregate(Spark 2.4 或更高版本),用于组装数据。

    df %>% withColumn("theLastVar", expr("aggregate(array(var1, var2), (x, y) -> y)"))
    

    或(与版本无关的)表达式组合:

    scols <- c("var1", "var2") %>% purrr::map(column)
    
    sumOfVars <- scols %>%
      purrr::map(function(x) coalesce(x, lit(0)))  %>%
      purrr::reduce(function(x, y) x + y, .init=lit(0))
    
    countOfVars <- scols %>% 
      purrr::map(function(x) ifelse(isNotNull(x), lit(1), lit(0))) %>%
      purrr::reduce(
        function(x, y) x + y, .init=lit(0))
    
    df %>% withColumn("meanOfVars", sumOfVars / countOfVars)
    

    【讨论】:

    • Greatest 是一个有趣的函数名称!谢谢!
    猜你喜欢
    • 2017-08-03
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多