使用Pyspark过滤包含None值的数据框列

177

我正在尝试过滤一个 PySpark 数据框,其中包含 None 作为行值:

df.select('dt_mvmt').distinct().collect()

[Row(dt_mvmt=u'2016-03-27'),
 Row(dt_mvmt=u'2016-03-28'),
 Row(dt_mvmt=u'2016-03-29'),
 Row(dt_mvmt=None),
 Row(dt_mvmt=u'2016-03-30'),
 Row(dt_mvmt=u'2016-03-31')]

我可以使用字符串值正确过滤:

df[df.dt_mvmt == '2016-03-31']
# some results here

但是这样失败了:

df[df.dt_mvmt == None].count()
0
df[df.dt_mvmt != None].count()
0

但是每个类别肯定都有价值观。发生了什么?


2
您实际上想要过滤掉具有空值的行,而不是列中的无值。标题可能会误导人。 - Atorpat
简而言之,涉及到null(或在此情况下为None)的比较总是返回false。特别地,比较(null == null)返回false。同样,比较(None == None)也返回false。 - Richard Gomes
12个回答

0
df = df.filter(df['dt_mvmt'].isNull()).count()

你的回答可以通过提供更多的支持性信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的回答是否正确。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - undefined

0

在pyspark中,你可以使用:

from pyspark.sql.functions import *
df.filter(col("dt_mvmt").isNull()).show()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接