PySpark筛选,是5> NULL正确还是错误还是被忽略?

时间:2020-09-19 18:19:32

标签: python apache-spark pyspark

在Pyspark中,我们要比较2列中的值,例如:

df = df.filter(F.col(1) > F.col(2))

如果Col 1的值为5,而Col 2的值为NULL,将会发生什么?会不会被过滤?

这是真还是假还是什么?

1 个答案:

答案 0 :(得分:1)

它将评估为false。您正在尝试将一个值与null进行比较,后者是一个null指针。

要进行相同的模拟:

准备数据

case class Test(t1:Int,t2:Int)
var df = Seq(Test(1,1),Test(2,0),Test(3,3)).toDF
df.show(false)

+ --- + --- +
| t1 | t2 |
+ --- + --- +
| 1 | 1 |
| 2 | 0 |
| 3 | 3 |
+ --- + --- +

比较非空数据

df.filter($"t1">$"t2").show(false)

+ --- + --- +
| t1 | t2 |
+ --- + --- +
| 2 | 0 |
+ --- + --- +

添加具有空值的列

df=df.withColumn("t3",lit(null))
df.show(false)

+ --- + --- + ---- +
| t1 | t2 | t3 |
+ --- + --- + ---- +
| 1 | 1 |空|
| 2 | 0 |空|
| 3 | 3 |空|
+ --- + --- + ---- +

与null相比

df.filter($"t1">$"t3").show(false)

+ --- + --- + --- +
| t1 | t2 | t3 |
+ --- + --- + --- +
+ --- + --- + --- +