对布尔值进行过滤时出现奇怪的 pyspark 行为

Weird pyspark behavior when filtering on booleans

提问人:rouble 提问时间:11/17/2023 最后编辑:rouble 更新时间:11/17/2023 访问量:44

问:

我们有一些现有的代码曾经在 Spark 3.1 中工作,现在在 Spark 3.3 中不起作用。这真的是微不足道的代码,所以它让我大吃一惊为什么过滤器不起作用:

widgets_df = widgets_df.filter(F.col("_id").isin(*widget_ids))

出于某种原因,即使有 F.col(“_id”) 所在的行widget_ids,我们最终也会得到一个空widgets_df。

因此,我们决定对此进行一些重构,以调试正在发生的事情

widgets_df = widgets_df.withColumn("IdMatch", F.col("_id").isin(widget_ids))

# print outs for debugging
widgets_df.printSchema()
widgets_df.show(vertical=True)
# We can clearly see the IdMatch column with value true on one row.
# IdMatch is of type Boolean

widgets_df = widgets_df.filter(F.col("IdMatch") == True) // But this will drop all rows

我们又有一个空widgets_df。

我们可能在这里遗漏了一些相对微不足道的东西。我们错过了什么?

python apache-spark pyspark apache-spark-sql aws-glue

评论

0赞 user2704177 11/17/2023
如果您像 .filter(f.col(“IdMatch”)) 一样过滤,因为它已经是布尔列了怎么办?
0赞 rouble 11/17/2023
好点子,但区别一样。我迷失了。
2赞 user2704177 11/17/2023
那么我相信你显示的代码与你正在运行的代码不匹配。

答: 暂无答案