这是一种方法,使用sparklyr 和dplyr。为了一个可重现的例子,我使用来自 nycflights13 包的航班数据(336776 obs. of 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,然后计算 NA;我认为最后一步只用了不到 10 秒)。
当然,您的数据集更大,但也许可以。 (我也在我正在处理的一个更大的数据集数据中进行了尝试,因此大约有 200 万个对象和 146 个变量,并且只需要几分钟)。