使用SparkR离散变量

问题描述 投票:1回答:1

我想使用R(最好是SparkR)对变量进行离散化处理,以便所需的结果如下所示。

library(arules)

mtcars %>% mutate(bins = discretize(x = mpg, method = "interval", breaks = 4))

我检查了文档,但只能在https://spark.apache.org/docs/2.2.0/ml-features.html#bucketizer看到非R解决方案。

请指教。

r apache-spark sparkr apache-spark-ml arules
1个回答
1
投票

一般来说,SparkR提供了非常有限的ML函数子集(计划为Spark 3.0提供全面支持,作为单独的R包SPARK-24359 SPIP: ML Pipelines in 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)
© www.soinside.com 2019 - 2024. All rights reserved.