r - SparkR(Spark 2.1.0 或 2.2.0)中有 MaxAbsScaler 吗?

标签 r dataframe apache-spark-sql preprocessor sparkr

spark中,scala、java、python中有StandardScaler、MinMaxScaler、MaxAbsScaler。 Spark 在 R (SparkR) 中是否有类似的方法?

最佳答案

在 Spark 2.2.0 或 2.1.0 中,提供了 scala、java 和 python 中数据预处理所必需的缩放器。但 R (SparkR) 中还没有可用的缩放器。因此,我编写了两个缩放数据框列的函数。

函数1:

# max abs scaler function (R dataframe to Spark Dataframe)
maxabsscaler <- function(df, cols, scalingUpperLimit){
  for(i in cols){
    max <- max(df[i])
    df[i] <- (df[, c(i)] / max) * scalingUpperLimit
  }
  return(as.DataFrame(df))
}

功能2:

# max abs scaler function (Only Spark Dataframe)
maxabsscaler2 <- function(df, cols, scalingUpperLimit){
  createOrReplaceTempView(df, "df_tmp")
  for(i in columns){
    max <- collect(sql(paste("SELECT MAX(", i ,") FROM df_tmp")))[[1]]
    df[[i]] <- df[[i]] / max * scalingUpperLimit
  }
  return(df)
}

注意: Function1 适合您的桌面应用程序或测试环境,因为当您调用此函数时,您需要将 Spark 数据帧转换为 R 数据帧。 R 数据框在单台计算机上运行。因此,它不适合大数据集。在Function2中,不需要将spark数据帧转换为R数据帧。因此,您可以将此功能部署到您的生产环境中。函数无法处理 NA 值。但你可以改进它们。你需要指定列和scalingUpperLimit(100、10、1等)参数。

示例用法:

survival_of_patients <- read.df("D:\\projects\\R\\data\\survival_of_patients.csv", "csv", header = "true")

trainTest <-randomSplit(survival_of_patients, c(0.8, 0.2), 42)
train = trainTest[[1]]
test = trainTest[[2]]

columns <- colnames(as.data.frame(train))[!colnames(as.data.frame(train)) %in% c("SurvivalStatus")]

train <- maxabsscaler(as.data.frame(train), columns,  10)
test <- maxabsscaler(as.data.frame(test), columns,  10)

# or
# train <- maxabsscaler2(train, columns,  10)
# test <- maxabsscaler2(test, columns,  10)

您可以下载该数据集并测试功能。 https://archive.ics.uci.edu/ml/datasets/Haberman%27s+Survival

关于r - SparkR(Spark 2.1.0 或 2.2.0)中有 MaxAbsScaler 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47224579/

相关文章:

pandas - 添加一列,该列是 pandas 中连续行的差异结果

sql - 为什么使用rank()窗口函数会破坏解析器?

java - Spark 数据集 : Reduce, 数据集的 Agg、Group 或 GroupByKey <Tuple2> Java

r - 在 R 中生成序列 (1,301,2, 302, 3, 303, 4,304 ...)

按组滚动/移动平均

r - 如何处理重叠因子水平? (例如,在制作表格和图表时)

apache-spark - Spark ;检查元素是否在 collect_list 中

r - 即使不需要,如何在 R 的 quote() 中保留 `backticks` ?

r - 使用 ggplot2 绘制非标准年份(水年)

python - 按一列分组并找到编号。另一列中的唯一值