如何使用SparkR计算数据帧中每列缺失值的数量?
我正在处理一个2,5 GB的csv文件,其中包含110万行和1000个数字列,这些列似乎很少填充。我目前在一个有8GB内存的单核VM上执行Spark,数据被分割成16个分区 我尝试了以下方法,但需要很长时间:如何使用SparkR计算数据帧中每列缺失值的数量?,sparkr,Sparkr,我正在处理一个2,5 GB的csv文件,其中包含110万行和1000个数字列,这些列似乎很少填充。我目前在一个有8GB内存的单核VM上执行Spark,数据被分割成16个分区 我尝试了以下方法,但需要很长时间: ldf <- dapplyCollect( df, function(df.partition) { apply(df.partition, 2, function(col) {sum(is.na(col))}) }) ldf这里有一种方
ldf <- dapplyCollect(
df,
function(df.partition) {
apply(df.partition, 2, function(col) {sum(is.na(col))})
})
ldf这里有一种方法,使用sparkyr
和dplyr
。为了得到一个可重复的示例,我使用了nycflights13
包中的航班数据(19个变量的336776 obs.)
库(nycflights13)
图书馆(年)
图书馆(dplyr)
sc%
dplyr::mutate_all(as.numeric)%%>%
dplyr::汇总所有(总和)%%>%
dplyr::collect()
你得到结果了吗
> collect(flights_spark_isna_count)
# A tibble: 1 × 19
year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay carrier flight tailnum origin dest air_time
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 0 0 0 8255 0 8255 8713 0 9430 0 0 2512 0 0 9430
# ... with 4 more variables: distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dbl>
>收集(航班数\u spark\u isna\u计数)
#一个tibble:1×19
年-月-日-日-日-日-日-日-日-日-日-日-日-日-日-日-日-日-日-日-日-日-日-日-日-日-日-日-日-日-日-日-日-日-日-日-日-日-日-日
1 0 0 0 8255 0 8255 8713 0 9430 0 0 2512 0 0 9430
# ... 还有4个变量:距离、小时、分钟、时间和小时
在我的旧笔记本电脑中,所有这些代码大约需要30秒(也就是说,包括启动Spark会话,将数据读入Spark,然后对NAs进行计数;我认为最后一步不到10秒)
当然,您的数据集更大,但也许它可以工作。(我也在我正在处理的一个更大的数据集数据中尝试了它,所以大约有200万obs.和146个变量,只需几分钟)。我仍然希望得到答案。
> collect(flights_spark_isna_count)
# A tibble: 1 × 19
year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay carrier flight tailnum origin dest air_time
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 0 0 0 8255 0 8255 8713 0 9430 0 0 2512 0 0 9430
# ... with 4 more variables: distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dbl>