Apache spark 使用spark_apply计算缺失值的数量
我的下一个数据帧名为dfApache spark 使用spark_apply计算缺失值的数量,apache-spark,dplyr,apply,na,missing-data,Apache Spark,Dplyr,Apply,Na,Missing Data,我的下一个数据帧名为df ci ing de 21 20 100 22 19 0 23 NA 80 24 100 NA 25 NA 50 26 50 30 我想使用spark计算每列的丢失次数 我知道在R中,像这样的代码可以工作 apply(df, 2, FUN = function (x) { sum(is.na(x)) } ) 我想做同样的事情,但是使用spark Spark有一个名为“Spark\u apply”的函数,但我不知道
ci ing de
21 20 100
22 19 0
23 NA 80
24 100 NA
25 NA 50
26 50 30
我想使用spark计算每列的丢失次数
我知道在R中,像这样的代码可以工作
apply(df, 2,
FUN = function (x)
{ sum(is.na(x)) } )
我想做同样的事情,但是使用spark
Spark有一个名为“Spark\u apply”的函数,但我不知道如何使它工作。这里是“na”在df中检查
scala> nacount=df.na.count()
scala>nacount
2000
这里是“na”正在签入df
scala> nacount=df.na.count()
scala>nacount
2000
火花点火器(
df,
(函数(e)和(is.na(e)),
name=c(“您的”、“列”、“名称”)
)
请尝试上述方法(
df,
(函数(e)和(is.na(e)),
name=c(“您的”、“列”、“名称”)
)
尝试上面的方法不完美,但使用spark\u apply可满足您的需要:
## count missing values by each column and group by category
ci = c(21:26)
ing = c(20,19,NA,100,NA,50)
de = c(100,0,80,NA,50,30)
df = as.data.frame(list(ci=ci, ing=ing, de=de))
sdf = copy_to(sc, df)
count_na_col_i = function(i, sdf) {
cns = colnames(sdf)
cnt = spark_apply(sdf %>% select(cns[1], cns[i]) %>% mutate(x = cns[i]) %>% rename(y = cns[i]), #preparing data for spark_apply and renames as necessary
f = function(tbl){
require(dplyr)
cn = as.character(collect(tbl %>% select("x") %>% distinct()))
tbl %>% filter(is.na(y)) %>% count()
}, columns = cns[i], group_by = cns[1])
collect(cnt)
}
#i-th column only
i = 2
nna = count_na_col_i(2, sdf)
#all columns
lapply(seq(2,length(colnames(sdf))), function(i, sdf) { count_na_col_i(i, sdf) }, sdf)
不完美,但使用spark_apply可满足您的目的:
## count missing values by each column and group by category
ci = c(21:26)
ing = c(20,19,NA,100,NA,50)
de = c(100,0,80,NA,50,30)
df = as.data.frame(list(ci=ci, ing=ing, de=de))
sdf = copy_to(sc, df)
count_na_col_i = function(i, sdf) {
cns = colnames(sdf)
cnt = spark_apply(sdf %>% select(cns[1], cns[i]) %>% mutate(x = cns[i]) %>% rename(y = cns[i]), #preparing data for spark_apply and renames as necessary
f = function(tbl){
require(dplyr)
cn = as.character(collect(tbl %>% select("x") %>% distinct()))
tbl %>% filter(is.na(y)) %>% count()
}, columns = cns[i], group_by = cns[1])
collect(cnt)
}
#i-th column only
i = 2
nna = count_na_col_i(2, sdf)
#all columns
lapply(seq(2,length(colnames(sdf))), function(i, sdf) { count_na_col_i(i, sdf) }, sdf)
使用@Charlie的
sdf
对象:
sdf %>% spark_apply(function(e) apply(e, 2, function(x) sum(is.na(x))))
我会做好的
结果是一个df,其中一列包含一行中sdf
每列的NA
s数。如果需要,您可以将其转置(..%>%as.data.frame()%%>%t()
)并手动添加列名
# Source: table<sparklyr_tmp_3f7f4665748e> [?? x 1]
# Database: spark_connection
ci
<int>
1 0
2 2
3 1
#来源:表[??x 1]
#数据库:spark_连接
词
1 0
2 2
3 1
使用@Charlie的sdf
对象:
sdf %>% spark_apply(function(e) apply(e, 2, function(x) sum(is.na(x))))
我会做好的
结果是一个df,其中一列包含一行中sdf
每列的NA
s数。如果需要,您可以将其转置(..%>%as.data.frame()%%>%t()
)并手动添加列名
# Source: table<sparklyr_tmp_3f7f4665748e> [?? x 1]
# Database: spark_connection
ci
<int>
1 0
2 2
3 1
#来源:表[??x 1]
#数据库:spark_连接
词
1 0
2 2
3 1
我将澄清“缺失”的含义。如果您正在推断如何在Spark中计算空值,这里有一篇关于使用空值的好文章。抱歉,但我不理解我将澄清“缺失”的含义。如果您正在推断如何在Spark中计算空值,这里有一篇关于使用空值的好文章。抱歉,我不知道t了解类字符返回0,类数值-->返回所有NA的总和(所有列)不是预期的结果。了解类字符返回0,类数值-->返回所有NA的总和(所有列)不是预期的结果