В целом SparkR предоставляет очень ограниченный набор функций ML (полная поддержка Spark 3.0 запланирована в виде отдельного пакета R SPARK-24359 SPIP: конвейеры ML в R , хотя такая простая дискретизация, как эта , может быть выполнен с использованием CASE ... WHEN ...
операторов.
Сначала вычислите разрывы:
df <- createDataFrame(mtcars)
min_max <- df %>%
select(min(df$mpg), max(df$mpg)) %>%
collect() %>%
unlist()
n <- 4
breaks <- seq(min_max[[1]], min_max[[2]], length.out = n)
Затем сгенерируйте выражение:
bucket <- purrr::map2(
breaks[-n], breaks[-1],
function(x, y) between(column("mpg"), c(x, y))) %>%
purrr::reduce2(
., seq(length(.)),
function(acc, x, y) otherwise(when(x, y), acc),
.init = lit(NA))
df %>% withColumn("bucket", bucket)