计算数据帧 Spark 中缺失值的数量

Posted

技术标签:

【中文标题】计算数据帧 Spark 中缺失值的数量【英文标题】:Count the number of missing values in a dataframe Spark 【发布时间】:2017-06-07 12:48:55 【问题描述】:

我有一个带有缺失值的dataset,我想获取每列缺失值的数量。以下是我所做的,我得到了非缺失值的数量。如何使用它来获取缺失值的数量?

df.describe().filter($"summary" === "count").show
+-------+---+---+---+
|summary|  x|  y|  z|
+-------+---+---+---+
|  count|  1|  2|  3|
+-------+---+---+---+

如果有任何帮助,请获取dataframe,我们将在其中找到每一列的缺失值的列和数量。

【问题讨论】:

另见***.com/questions/41765739/… 【参考方案1】:

在将isNull() 方法的布尔输出转换为整数类型后,您可以对缺失值求和:

Scala:

import org.apache.spark.sql.functions.sum, col
df.select(df.columns.map(c => sum(col(c).isNull.cast("int")).alias(c)): _*).show

Python:

from pyspark.sql.functions import col,sum
df.select(*(sum(col(c).isNull().cast("int")).alias(c) for c in df.columns)).show()

或者,您也可以使用df.describe().filter($"summary" === "count") 的输出,然后将每个单元格中的数字减去数据中的行数:

Scala:

import org.apache.spark.sql.functions.lit,

val rows = df.count()
val summary = df.describe().filter($"summary" === "count")
summary.select(df.columns.map(c =>(lit(rows) - col(c)).alias(c)): _*).show

Python:

from pyspark.sql.functions import lit

rows = df.count()
summary = df.describe().filter(col("summary") == "count")
summary.select(*((lit(rows)-col(c)).alias(c) for c in df.columns)).show()

【讨论】:

感谢您的帮助。它奏效了。但是有没有其他方法可以减少时间。因为大数据需要很多时间 @mtoto describe() 函数计算所有其他操作,因此可能需要更多时间,请使用:df.summary("count") 限制仅用于计数的计算。无需使用:df.describe().filter(col("summary") == "count") 这非常有用,谢谢,我如何将多个指标添加到输出中?即 isNull 的一行和每列的 value=X 的一行【参考方案2】:
from pyspark.sql.functions import isnull, when, count, col
nacounts = df.select([count(when(isnull(c), c)).alias(c) for c in df.columns]).toPandas()
nacounts

【讨论】:

如果你能提供一些关于代码在做什么的解释,如果你能正确格式化代码,这将是一个更完整的答案,请参阅***.com/editing-help了解如何格式化代码的详细信息.【参考方案3】:
for i in df.columns:
  print(i,df.count()-(df.na.drop(subset=i).count()))

【讨论】:

以上是关于计算数据帧 Spark 中缺失值的数量的主要内容,如果未能解决你的问题,请参考以下文章

如何在数据框中指定缺失值

机器学习基础:缺失值的处理技巧(附Python代码)

Python/Pandas:计算每行中缺失/NaN 的数量

在缺失值的数量上循环删除列

分组分类并计算特征中的缺失值

R x相关性计算时缺失值的处理