使用SparkR删除仅具有NA值的列

时间:2019-09-12 18:00:56

标签: r pyspark apache-spark-sql databricks sparkr

我在数据块中使用SparkR来操纵大型数据帧。我有一个spark DataFrame df,我想从中删除仅包含NA值的所有列。在典型的R中,我会使用tidyverse方法

df %>% select_if(~any(!is.na(.)))

或在基数R

df[!sapply(df, function(x) all(is.na(x)))]

但是,这两种方法似乎都无法在SparkR中工作。我还想尽可能多地使用Spark的功能来分发工作。我找到了以下解决方案

nacols<- sapply(columns(df), function(c){
  nbna <- SparkR::select(df, c) %>% SparkR::na.omit() %>% SparkR::nrow()
  return(nbna != 0)
})

df_nona<- df %>% SparkR::select(columns(df)[c(T, nacols)])

但是我认为考虑到SparkR不分发sapply的工作,效率很低。

请让我知道您是否可以想到一种更好的方法。我愿意使用pyspark在python中执行脚本的这一部分。但是,由于我使用的是高并发集群,因此无法使用Scala代码。

非常感谢您。

0 个答案:

没有答案