PySpark 过滤器无法与使用 lambda 功能构建的 True 一起使用

PySpark filter works incorrectly with one True built using lambda funtion

提问人:Python Puzzle 提问时间:10/3/2023 更新时间:10/3/2023 访问量:34

问:

我正在调试一个函数,我遇到了一个神秘的事情:

给定一个包含一列 (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() 而不是 == 不起作用。

有什么想法吗?这对我来说完全是胡说八道!

先谢谢你!

pyspark lambda where-clause 布尔逻辑

评论


答: 暂无答案