2016-11-15 10 views
1

私は、まばたきのように見える1,150万行と1000個の数値列を含む2,5 GBのcsvファイルを処理しています。私は現在8GBの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> 

を取得し、それがかかりましたSparkセッションを開始し、Sparkにデータを読み込んだり、NAsを数えたりするなど、このコードはすべて約30秒です。この最後のステップは10秒以内でした。

もちろん、あなたのデータセットはもっと大きいですが、おそらくそれは機能します。 (私は作業中の大規模なデータセットのデータでも試したので、約200万個のobsと146個の変数があり、数分しかかかりません)。

関連する問題