Sparklyr для блоков данных - взятие среднего значения для нескольких столбцов по очереди во фрейме данных Sparklyr со многими значениями NaN - PullRequest
1 голос
/ 15 октября 2019

Я пытаюсь создать минимальные, максимальные и средние столбцы для фрейма данных sparklyr. Я хочу использовать только 5 столбцов из этого большого фрейма данных, по очереди в расчете. В столбцах есть много значений NaN, которые могут вычислять вещи. В стандарте R используемый код будет:

df_train$MinEncoding <- spark_apply(df_train,f=min ,columns=[,EncodingFeatures], 1, FUN=min,na.rm=TRUE)

df_train$MaxEncoding <- spark_apply(df_train[,EncodingFeatures], 1, FUN=max,na.rm=TRUE)

df_train$MeanEncoding <- spark_apply(df_train[,EncodingFeatures], 1, FUN=mean,na.rm=TRUE)

Я пробовал

df_train %>% spark_apply(function(df) {dplyr::mutate(df, MeanLicenceEncoding = mean(LicenceEncodingFeatures))})

Однако искра прерывает работу. Может кто-нибудь помочь, пожалуйста?

1 Ответ

1 голос
/ 15 октября 2019

Для переменных столбцов вы можете использовать HIVE's greatest() и least() с dplyr и sparklyr следующим образом:

library(sparklyr)
library(dplyr)

sc <- spark_connect(master = "local")
iris <- copy_to(sc, iris)

columns <- c("Sepal_Length", "Sepal_Width")

transmute(iris,
          max = greatest(!!! rlang::parse_exprs(columns)),
          min = least(!!! rlang::parse_exprs(columns)),
          avg = sql(!! paste(paste("if(isnull(", columns, "), 0, ", columns, ")", collapse = " + "))) / !!length(columns))
# Source: spark<?> [?? x 3]
     max   min   avg
   <dbl> <dbl> <dbl>
 1   5.1   3.5  6.85
 2   4.9   3    6.4 
 3   4.7   3.2  6.3 
 4   4.6   3.1  6.15
 5   5     3.6  6.8 
 6   5.4   3.9  7.35
 7   4.6   3.4  6.3 
 8   5     3.4  6.7 
 9   4.4   2.9  5.85
10   4.9   3.1  6.45
# … with more rows
...