apache-spark - not - pyspark sql query
¿Cómo encontrar el recuento de valores nulos y nan para cada columna en un marco de datos de PySpark de manera eficiente? (2)
Puede crear un UDF
para ckeck null
y NaN
y devolver el valor boolean
para filtrar
El código es el código de Scala Espero que puedas convertir a Python.
val isNaN = udf((value : Float) => {
if (value.equals(Float.NaN) || value == null) true else false })
val result = data.filter(isNaN(data("column2"))).count()
Espero que esto ayude !
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"))
Rendimiento esperado
Marco de datos con cuenta de nan / null para cada columna
Nota: Las preguntas anteriores que encontré en el desbordamiento de pila solo verifican si hay nulo y no nan. Es por eso que he creado una nueva pregunta.
Sé que puedo usar la función isnull () en spark para encontrar el número de valores Null en la columna de Spark, pero ¿cómo encontrar los valores de Nan en el marco de datos de Spark?
Puede usar el método que se muestra here y reemplazar isNull
con 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|
+-------+----------+---+
o
df.select([count(when(isnan(c) | col(c).isNull(), c)).alias(c) for c in df.columns]).show()
+-------+----------+---+
|session|timestamp1|id2|
+-------+----------+---+
| 0| 0| 5|
+-------+----------+---+