Сгруппированный процентиль с использованием SparkR - PullRequest
0 голосов
/ 28 августа 2018

Я хочу рассчитать сгруппированные процентили, используя SparkR. Я попробовал это

library(SparkR)
mtcars_spark %>% 
      SparkR::groupBy("cyl") %>%
      SparkR::summarize(p75 = approxQuantile("mpg", 0.75, 0.01),
                        p90 = approxQuantile("mpg", 0.90, 0.01),
                        p99 = approxQuantile("mpg", 0.99, 0.01))

... но, получил эту ошибку:

unable to find an inherited method for function ‘approxQuantile’ for signature ‘"GroupedData", "character", "numeric", "numeric"’

Как получить сгруппированный процентиль с помощью SparkR, чтобы желаемый результат был таким же, как в следующем коде:

library(dplyr)
mtcars %>% 
  group_by(cyl) %>% 
  summarise(p75 = quantile(mpg, 0.75),
            p90 = quantile(mpg, 0.90),
            p99 = quantile(mpg, 0.99))

1 Ответ

0 голосов
/ 29 августа 2018

approxQuantile - это метод, который работает на Datasets - у него нет варианта, который работает на *GroupedDataset. Если вы включили поддержку Hive, вы используете Hive's percentile UDF:

mtcars_spark %>% 
    SparkR::groupBy("cyl") %>%
    SparkR::summarize(p75 = expr("percentile(mpg, 0.75)"),
                      p90 = expr("percentile(mpg, 0.90)"),
                      p99 = expr("percentile(mpg, 0.99)"))

Если нет, вы можете попробовать gapply функцию, но она, вероятно, будет гораздо менее эффективной.

...