一尘不染

PySpark中的比较运算符(不等于/!=)

sql

我试图获取一个数据帧中的所有行,其中两个标志设置为“ 1”,随后所有那些其中只有两个标志之一设置为“ 1”而另一个 不等于 “ 1”的那些行

使用以下架构(三列),

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')
                            )

我获得以下数据框:

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

当我应用所需的过滤器时,第一个过滤器(foo = 1 AND bar = 1)有效,而其他过滤器(foo = 1 AND NOT bar = 1)不起作用

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

产量:

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

这是非行为过滤器:

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

为什么不过滤?如何获取只有foo等于‘1’的列?


阅读 149

收藏
2021-03-17

共1个答案

一尘不染

要过滤空值,请尝试:

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

2021-03-17