为什么 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 True
、False
或 Unknown (NULL)
。仅当条件的结果为 True.
时,它们才“满足”
本例中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 True
、False
或 Unknown (NULL)
。仅当条件的结果为 True.