计算数据帧 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 中缺失值的数量的主要内容,如果未能解决你的问题,请参考以下文章