這裏有一個辦法做到這一點,利用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