2016-11-15 80 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个变量,只需要几分钟)。

相关问题