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

时间:2017-06-07 12:48:55

标签: apache-spark dataframe apache-spark-sql

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

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

任何帮助请获取dataframe,我们会在其中找到每个列的列数和缺失值。

非常感谢

2 个答案:

答案 0 :(得分:17)

您可以通过将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()

答案 1 :(得分:1)

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