Saltar al contenido

Operador de comparación en PySpark (no igual/ !=)

Si encuentras algún fallo con tu código o proyecto, recuerda probar siempre en un ambiente de testing antes añadir el código al proyecto final.

Solución:

Filtrar null valores prueba:

foo_df = df.filter( (df.foo==1) & (df.bar.isNull()) )

https://spark.apache.org/docs/1.6.2/api/python/pyspark.sql.html#pyspark.sql.Column.isNull

porque no filtra

Porque es SQL y NULL indica valores faltantes. Por eso cualquier comparación con NULLaparte de IS NULL y IS NOT NULL es indefinido. Necesitas:

col("bar").isNull() | (col("bar") != 1)

o

coalesce(col("bar") != 1, lit(True))

o (PySpark >= 2.3):

col("bar").eqNullSafe(1)

si tu quieres null comparaciones seguras en PySpark.

También 'null' no es una forma válida de presentar NULL literal. Deberías usar None para indicar objetos perdidos.

from pyspark.sql.functions import col, coalesce, lit

df = spark.createDataFrame([
    ('a', 1, 1), ('a',1, None), ('b', 1, 1),
    ('c' ,1, None), ('d', None, 1),('e', 1, 1)
]).toDF('id', 'foo', 'bar')

df.where((col("foo") == 1) & (col("bar").isNull() | (col("bar") != 1))).show()

## +---+---+----+
## | id|foo| bar|
## +---+---+----+
## |  a|  1|null|
## |  c|  1|null|
## +---+---+----+

df.where((col("foo") == 1) & coalesce(col("bar") != 1, lit(True))).show()

## +---+---+----+
## | id|foo| bar|
## +---+---+----+
## |  a|  1|null|
## |  c|  1|null|
## +---+---+----+

Si sostienes alguna perplejidad o disposición de aclarar nuestro reseña eres capaz de realizar una apostilla y con gusto lo ojearemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *