这里有一个办法做到这一点,利用sparklyr
和dplyr
。对于重复的例子起见,我使用航班数据从nycflights13
包(336776个OBS 19个变数。)
library(nycflights13)
library(sparklyr)
library(dplyr)
sc <- sparklyr::spark_connect(master = "local", version = "2.1.0", hadoop_version = "2.7")
flights_spark <- sparklyr::copy_to(sc, flights)
src_tbls(sc)
flights_spark %>%
dplyr::mutate_all(is.na) %>%
dplyr::mutate_all(as.numeric) %>%
dplyr::summarise_all(sum) %>%
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>
在我的旧笔记本电脑,花了大约30秒,所有这些代码(即包括启动Spark会话,将数据读入Spark,然后计算NAs;最后一步我认为不到10秒钟)。
当然你的数据集较大,但也许它工作。 (我在尝试使用更大的数据集数据,因此大约有200万个obs。和146个变量,只需要几分钟)。
我还是希望能得到答案。 – CodingButStillAlive