【问题标题】:How to count number of missing values for each column of a data frame with SparkR?如何使用 SparkR 计算数据框每一列的缺失值数量?
【发布时间】:2016-11-15 20:25:43
【问题描述】:

我正在处理一个 2.5 GB 的 csv 文件,其中包含 110 万行和 1000 个似乎很少填充的数字列。我目前在具有 8 GB RAM 的 1 核 VM 上执行 Spark,数据已拆分为 16 个分区。

我尝试了类似以下的方法,但需要很长时间:

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

【问题讨论】:

  • 我还是希望能得到答复。

标签: sparkr


【解决方案1】:

这是一种方法,使用sparklyrdplyr。为了一个可重现的例子,我使用来自 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 个变量,并且只需要几分钟)。

【讨论】:

    猜你喜欢
    • 2019-04-21
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    • 2021-04-24
    • 2017-08-08
    相关资源
    最近更新 更多