我正在尝试为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))})
但是spark会中止工作。有人可以帮忙吗?
答案 0 :(得分:1)
对于变量列,可以将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