为什么 Null 不包含在 PySpark 过滤器的“!=”条件中?

Why isn't null included in PySpark filter's "!=" condition?

本例中dataset/code:

df = spark.createDataFrame(
    [
        (1, "All canines"),
        (2, None),
        (3, "Test"),
    ],
    ["row_id", "animal"]
)

df = df.filter(df.animal != "All canines")

return df

我希望它是 return 行 ID 2 和 3 但出于某种原因它只是 returning 行 ID 3。我的意思是我可以很容易地做到这一点:

df = df.filter((df.animal != "All canines") | (df.animal.isNull()))

但我不明白 PySpark 在条件语句中也剥离 null 的逻辑。幕后发生了什么?

WHERE 运算符根据用户指定的条件过滤行。条件表达式是一个布尔表达式,可以是 return TrueFalseUnknown (NULL)。仅当条件的结果为 True.

时,它们才“满足”