Пошаговый расчет с использованием SparkR - PullRequest
0 голосов
/ 01 ноября 2018

Вот мой игрушечный фрейм данных.

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, как показано в 3-ей переменной в df выше? Если в SparkR нет функции строки, как я могу получить желаемый результат?

1 Ответ

0 голосов
/ 06 ноября 2018

Чтобы получить максимальное значение из набора столбцов, используйте 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)
...