我正在尝试筛选一个行值为None的PySpark数据帧:
df.select('dt_mvmt').distinct().collect()
[世界其他地区(dt_mvmt=u'2016-03-27'),
世界其他地区(dt_mvmt=u'2016-03-28'),
世界其他地区(dt_mvmt=u'2016-03-29'),
行(dt_mvmt=无),
世界其他地区(dt_mvmt=u'2016-03-30'),
世界其他地区(dt_mvmt=u'2016-03-31')]
我可以使用字符串值进行正确筛选:
df[df.dt_mvmt=='2016-03-31']
#这里有一些结果
但这失败了:
df[df.dt\u mvmt==None].count()
0
df[df.dt_mvmt!=None].count()
0
但每个类别都有明确的价值。发生什么事了
您可以使用Column.isNull/Column.isNotNull:
df.where(col(“dt_mvmt”).isNull())
df.where(col(“dt_mvmt”).isNotNull())
如果只想删除NULL值,可以使用na.drop和subset参数:
df.na.drop(子集=[“dt_mvmt”])
与NULL进行基于等式的比较将不起作用,因为在SQL中NULL是未定义的,因此任何将其与另一个值进行比较的尝试都会返回NULL:
sqlContext.sql(“选择NULL=NULL”).show()
## +-------------+
##|(NULL=NULL)|
## +-------------+
##|空|
## +-------------+
sqlContext.sql(“选择NULL!=NULL”).show()
## +-------------------+
##|(非(空=空))|
## +-------------------+
##|空|
## +-------------------+
将值与NULL进行比较的唯一有效方法是is/is NOT,该方法等同于isNull/isNotNull方法调用