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

Estoy tratando de obtener todas las filas en un marco de datos donde dos banderas están configuradas en '1' y, posteriormente, todas aquellas en las que solo una de las dos está configurada en '1' y la otraNO ES IGUAL a 1'

Con el siguiente esquema (tres columnas),

df = sqlContext.createDataFrame([('a',1,'null'),('b',1,1),('c',1,'null'),('d','null',1),('e',1,1)], #,('f',1,'NaN'),('g','bla',1)],
                            schema=('id', 'foo', 'bar')
                            )

Obtengo el siguiente marco de datos:

+---+----+----+
| id| foo| bar|
+---+----+----+
|  a|   1|null|
|  b|   1|   1|
|  c|   1|null|
|  d|null|   1|
|  e|   1|   1|
+---+----+----+

Cuando aplico los filtros deseados, el primer filtro (foo = 1 AND bar = 1) funciona, pero no el otro (foo = 1 AND NOT bar = 1)

foobar_df = df.filter( (df.foo==1) & (df.bar==1) )

rendimientos:

+---+---+---+
| id|foo|bar|
+---+---+---+
|  b|  1|  1|
|  e|  1|  1|
+---+---+---+

Aquí está el filtro que no se comporta:

foo_df = df.filter( (df.foo==1) & (df.bar!=1) )
foo_df.show()
+---+---+---+
| id|foo|bar|
+---+---+---+
+---+---+---+

¿Por qué no está filtrando? ¿Cómo puedo obtener las columnas donde solo foo es igual a '1'?

Respuestas a la pregunta(2)

Su respuesta a la pregunta