2017-11-10 26 views

답변

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