为了账号安全,请及时绑定邮箱和手机立即绑定

Pyspark 中的 None/== vs Null/isNull?

Pyspark 中的 None/== vs Null/isNull?

万千封印 2023-03-16 15:59:01
有什么区别:F.when(F.col('Name').isNull())和:F.when(F.col('Name') == None)它们的作用似乎不同。在检查列中的空值时,第一个似乎效果更好。有时第二种方法不适用于检查空名称。例如,如果我想检查 null 值并将 null 的名称替换为“Missing name”或其他内容,则第二种方法有时不会执行任何操作。我不确定为什么它有时有效而其他时间无效。但是第一种方法总是有效的。
查看完整描述

3 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

F.when(F.col('Name') == None)

None 是 python 中的对象,NoneType. 它与空字符串或 0 不同。对于这种情况,您可能希望使用

F.when(F.col('Name') is None)

使用==你正在检查F.col('Name')value 是否等于 None 对象,它会把东西扔掉。


查看完整回答
反对 回复 2023-03-16
?
千巷猫影

TA贡献1829条经验 获得超7个赞

请参阅此处:使用 None 值过滤 Pyspark 数据框列

基于相等的与 NULL 的比较将不起作用,因为在 SQL 中 NULL 是未定义的,因此任何将其与另一个值进行比较的尝试都会返回 NULL


查看完整回答
反对 回复 2023-03-16
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

在数据世界中,两个Null值(或两个值None)并不相同。


因此,如果您对两个值执行==or!=操作None,它总是会产生False. 这是构建功能的isNull()关键原因。isNotNull()


请看下面的例子以便更好地理解 -


创建一个dataframe具有少量有效记录和一个记录的None


from pyspark.sql.types import *

from pyspark.sql import Row

from pyspark.sql.functions import col


lst = [(1,'sometext'),(2,''),(3, None),(4, 'someothertext')]


myrdd = sc.parallelize(lst).map(lambda x: Row(id=x[0], txt=x[1]))

mydf= sqlContext.createDataFrame(myrdd)

isNull()返回True第 3 行,因此下面的语句返回一行 -


mydf.filter(col("txt").isNull()).show(truncate=False)

+---+----+

|id |txt |

+---+----+

|3  |null|

+---+----+

==运算符返回False第 3 行,因此没有记录被过滤掉。


mydf.filter(col("txt") == None).show(truncate=False)

+---+---+

|id |txt|

+---+---+

+---+---+


查看完整回答
反对 回复 2023-03-16
  • 3 回答
  • 0 关注
  • 337 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号