在Pyspark中,我们要比较2列中的值,例如:
df = df.filter(F.col(1) > F.col(2))
如果Col 1的值为5,而Col 2的值为NULL,将会发生什么?会不会被过滤?
这是真还是假还是什么?
答案 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 |
+ --- + --- + --- +
+ --- + --- + --- +