提问人:Python Puzzle 提问时间:10/3/2023 更新时间:10/3/2023 访问量:34
PySpark 过滤器无法与使用 lambda 功能构建的 True 一起使用
PySpark filter works incorrectly with one True built using lambda funtion
问:
我正在调试一个函数,我遇到了一个神秘的事情:
给定一个包含一列 (name_id) 的 PySpark 数据帧,我使用 lambda 函数构建另一个 (is_number) 数据帧,以查看name_id是否是字符为数字的字符串。
生成的 DataFrame (df) 如下所示:
df.show(4, False)
name_id | is_number |
---|---|
0001 | 真 |
0002 | 真 |
0003 | 真 |
0004 | 真 |
我需要计算 True 值的数量,因此我执行以下操作:
df.where(F.col("is_number")==True).count()
3
三??真?这是怎么回事?
它变得更奇怪了:
df.groupBy("is_number").count().show(4, False)
is_number | 计数 |
---|---|
真 | 4 |
看起来所有 True 值都是相同的,但是:
df.groupBy("is_number").count().where(F.col("is_number")=="True").collect()[0]["count"])
3
同样,它看起来像应用 where 函数会消除一个 True 值。过滤器功能的工作原理相同。
此外,我还检测到哪个 True 值是排除的值,它是第一个。
df.where(F.col("is_number")==True).show(4, False)
name_id | is_number |
---|---|
0002 | 真 |
0003 | 真 |
0004 | 真 |
我尝试过的其他事情:将 True 表达为非 False 是行不通的。显示的“true”值是 True 表示形式,而不是字符串“true”。使用 EqNullSafe() 而不是 == 不起作用。
有什么想法吗?这对我来说完全是胡说八道!
先谢谢你!
答: 暂无答案
上一个:R 中的布尔值转换为数值
评论