繁体   English   中英

使用SparkR逐行计算

[英]Rowwise calculation using SparkR

这是我的玩具数据框。

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中的第3个变量所示? 如果SparkR中没有行函数,如何获取所需的输出?

要从一组列中获取最大值 ,请使用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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM