【问题标题】:count number of missing values using spark_apply使用 spark_apply 计算缺失值的数量
【发布时间】:2017-07-20 16:44:20
【问题描述】:

我有下一个名为 df

的数据框
ci ing de
21 20 100
22 19 0
23 NA 80
24 100 NA
25 NA 50
26 50 30

我想使用 spark 计算每列的缺失数。

我知道在 R 中这样的代码可以工作

apply(df, 2, 
            FUN = function (x) 
            { sum(is.na(x)) }  ) 

我也想这样做,但使用 spark

Spark 有一个名为 spark_apply 的函数,但我不知道如何使它工作。

【问题讨论】:

  • 我会澄清“缺失”的含义。如果您要推断如何在 Spark 中计算 NULL 值,这里有一篇关于使用 NULL 的好文章。 stackoverflow.com/questions/41533290/…
  • 对不起,我不明白

标签: apache-spark dplyr apply na missing-data


【解决方案1】:

这里“na”正在检查 df...

scala> nacount=df.na.count()
scala>nacount
2000

【讨论】:

    【解决方案2】:

    spark_apply( df, (函数(e)总和(is.na(e)), 名称 = c("你的","列","名称") )

    试试上面的

    【讨论】:

    • 对于类字符返回 0,对于类数字返回所有 NA(在所有列上)的总和 --> 这不是预期的
    【解决方案3】:

    不完美,但使用 spark_apply 可以满足您的目的:

    ## count missing values by each column and group by category 
    ci = c(21:26)
    ing = c(20,19,NA,100,NA,50)
    de = c(100,0,80,NA,50,30)
    df = as.data.frame(list(ci=ci, ing=ing, de=de))
    sdf = copy_to(sc, df)
    count_na_col_i = function(i, sdf) {
      cns = colnames(sdf)
      cnt = spark_apply(sdf %>% select(cns[1], cns[i]) %>% mutate(x = cns[i]) %>% rename(y = cns[i]), #preparing data for spark_apply and renames as necessary
                f = function(tbl){
                  require(dplyr)
                  cn = as.character(collect(tbl %>% select("x") %>% distinct()))
                  tbl %>% filter(is.na(y)) %>% count()
                }, columns = cns[i], group_by = cns[1])
      collect(cnt)
    }
    #i-th column only
    i = 2
    nna = count_na_col_i(2, sdf)
    #all columns 
    lapply(seq(2,length(colnames(sdf))), function(i, sdf) { count_na_col_i(i, sdf) }, sdf)
    

    【讨论】:

      【解决方案4】:

      使用@Charlie 的sdf 对象:

      sdf %>% spark_apply(function(e) apply(e, 2, function(x) sum(is.na(x))))
      

      会做的。

      结果是一个 df,其中一个 col 包含一行中 sdf 的每一列的 NAs 的数量。如果需要,您可以转置它 (... %>% as.data.frame() %>% t()) 并手动添加列名。

      # Source:   table<sparklyr_tmp_3f7f4665748e> [?? x 1]
      # Database: spark_connection
           ci
        <int>
      1     0
      2     2
      3     1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多