import numpy as np
df = spark.createDataFrame(
[(1, 1, None), (1, 2, float(5)), (1, 3, np.nan), (1, 4, None), (1, 5, float(10)), (1, 6, float('nan')), (1, 6, float('nan'))],
('session', "timestamp1", "id2"))
résultat attend
dataframe avec le nombre de nan/null pour chaque colonne
Remarque: Les questions précédentes que j'ai trouvées dans le débordement de pile ne vérifient que null et non nan. C'est pourquoi j'ai créé une nouvelle question.
Je sais que je peux utiliser la fonction isnull () dans spark pour trouver le nombre de valeurs Null dans Spark colonne mais comment trouver les valeurs de Nan dans Spark dataframe?
Vous pouvez utiliser la méthode montrée ici et remplacer isNull
par isnan
:
from pyspark.sql.functions import isnan, when, count, col
df.select([count(when(isnan(c), c)).alias(c) for c in df.columns]).show()
+-------+----------+---+
|session|timestamp1|id2|
+-------+----------+---+
| 0| 0| 3|
+-------+----------+---+
ou
df.select([count(when(isnan(c) | col(c).isNull(), c)).alias(c) for c in df.columns]).show()
+-------+----------+---+
|session|timestamp1|id2|
+-------+----------+---+
| 0| 0| 5|
+-------+----------+---+
Vous pouvez créer un UDF
pour vérifier la cabine null
et NaN
et renvoyer la valeur boolean
à filtrer.
Le code est scala code espérons que vous pourrez convertir en python.
val isNaN = udf((value : Float) => {
if (value.equals(Float.NaN) || value == null) true else false })
val result = data.filter(isNaN(data("column2"))).count()
J'espère que cela t'aides !