r - 使用 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 中的第三个变量所示?如果 SparkR 中没有 rowwise 函数,如何获得所需的输出?
解决方案
要从一组列中获取最大值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)
推荐阅读
- python - Pandas 移动列,但添加非移动列为空的新行
- go - dep init 上的“不在已知的 GOPATH/src 中”错误
- javascript - 如何使用材料下拉菜单获取所选值?
- actions-on-google - TRANSACTION_REQUIREMENTS_CHECK 不起作用
- node.js - 如何让机器人在首次加入服务器时说出特定消息?
- java - 测试计划开始/结束时的 JMeter 方法调用
- c++ - 在 C++ 中内联外部汇编函数
- ms-access - 访问表达式:计算多列中的唯一值
- python - 来自 tkintet 文本的变量值的总和
- apache-spark - 必须使用 writeStream.start() 执行带有流源的查询