如何计算 Pyspark 中 None 或 NaN 值的百分比?

How do I calculate the percentage of None or NaN values in Pyspark?

我在 PySpark 中有一个更大的数据集,我想计算每列 None/NaN 个值的百分比并将其存储在另一个名为 percentage_missing 的数据框中。例如,如果以下是输入数据框:

df = sc.parallelize([
    (0.4, 0.3),
    (None, None),
    (9.7, None), 
    (None, None)
]).toDF(["A", "B"])

我希望输出是一个数据框,其中第 'A' 列包含值 0.5,第 'B' 列包含值 0.75。

我正在寻找这样的东西:

for column_ in my_columns:
  amount_missing = df[df[column_] == None].count().div(len(df)) * 100

如果有一个库具有执行此功能的功能,我也很乐意使用它。

以下代码完全按照您的要求执行:

from pyspark.sql.functions import *

df:

+----+----+
|   A|   B|
+----+----+
| 0.4| 0.3|
|null|null|
| 9.7|null|
|null|null|
+----+----+

# Generic solution for all columns
amount_missing_df = df.select([(count(when(isnan(c) | col(c).isNull(), c))/count(lit(1))).alias(c) for c in df.columns])
amount_missing_df.show()

amount_missing_df:

+---+----+
|  A|   B|
+---+----+
|0.5|0.75|
+---+----+