Databricks上的Sparklyr-在具有许多NaN值的sparklyr数据帧上,按行平均取多列

问题描述 投票:1回答:1

我正在尝试为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))})

但是星火使工作中止。有人可以帮忙吗?

r dplyr databricks sparklyr azure-databricks
1个回答
1
投票

对于变量列,您可以将HIVE's greatest()least()dplyrsparklyr一起使用,如下所示:

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
© www.soinside.com 2019 - 2024. All rights reserved.