【问题标题】:Is there a MaxAbsScaler in SparkR (Spark 2.1.0 or 2.2.0)?SparkR(Spark 2.1.0 或 2.2.0)中是否有 MaxAbsScaler?
【发布时间】:2018-04-23 18:56:01
【问题描述】:

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

【问题讨论】:

    标签: r dataframe spark-dataframe preprocessor sparkr


    【解决方案1】:

    在 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-10
      • 1970-01-01
      • 2018-02-25
      • 1970-01-01
      • 2018-04-22
      • 1970-01-01
      • 2018-02-18
      • 2016-12-04
      相关资源
      最近更新 更多