我有下一个名为 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
Saprk有一个名为 spark_apply 的功能,但我无法弄清楚如何让它工作
答案 0 :(得分:0)
这里“na”检查df ......
scala> nacount=df.na.count()
scala>nacount
2000
答案 1 :(得分:0)
spark_apply( DF, (函数(e)总和(is.na(e)), names = c(“你的”,“列”,“名字”) )
试试上面的
答案 2 :(得分:0)
不完美但使用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)
答案 3 :(得分:0)
使用@Charlie的sdf
对象:
sdf %>% spark_apply(function(e) apply(e, 2, function(x) sum(is.na(x))))
将完成这项工作。
结果是一个带有一个col的df,其中包含一行NA
中每列sdf
的个数。如果需要,您可以转置它(... %>% as.data.frame() %>% t()
)并手动添加组合名称。
# Source: table<sparklyr_tmp_3f7f4665748e> [?? x 1]
# Database: spark_connection
ci
<int>
1 0
2 2
3 1