sheet query not column cheat apache-spark pyspark apache-spark-sql pyspark-sql

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| +-------+----------+---+