spark에는 scala, java 및 python의 StandardScaler, MinMaxScaler, MaxAbsScaler가 있습니다. Spark에는 R (SparkR)과 같은 메소드가 있습니까?SparkR (Spark 2.1.0 또는 2.2.0)에 MaxAbsScaler가 있습니까?
2
A
답변
2
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)
}
참고 : 당신이 필요로하는이 함수를 호출 할 때하기 때문에 기능 1은 데스크톱 응용 프로그램이나 테스트 환경에 적합 스파크 데이터 프레임을 R 데이터 프레임으로 변환합니다. R 데이터 프레임은 단일 컴퓨터에서 실행됩니다. 따라서 큰 데이터 세트에는 적합하지 않습니다. Function2에서는 스파크 데이터 프레임을 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