2016-11-15 83 views
1

我正在處理一個2,5 GB的csv文件,其中包含1,1百萬行和1000個數字列,似乎是稀疏填充。我目前在具有8 GB RAM的1核VM上執行Spark,並將數據分成16個分區。如何使用SparkR統計數據幀每列的缺失值數量?

我試圖像下面,但它需要年齡:

ldf <- dapplyCollect(
    df, 
    function(df.partition) { 
     apply(df.partition, 2, function(col) {sum(is.na(col))}) 
    }) 
+0

我還是希望能得到答案。 – CodingButStillAlive

回答

0

這裏有一個辦法做到這一點,利用sparklyrdplyr。對於重複的例子起見,我使用航班數據從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個變量,只需要幾分鐘)。

相關問題