如何在 pyspark (spark) 中从 DF 获取包含值 None 的行
How to get rows from DF that contain value None in pyspark (spark)
在下面的示例中,df.a == 1
谓词 return 是正确的结果,但是 df.a == None
return 应该是 0 return 1.
l = [[1], [1], [2], [2], [None]]
df = sc.parallelize(l).toDF(['a'])
df # DataFrame[a: bigint]
df.collect() # [Row(a=1), Row(a=1), Row(a=2), Row(a=2), Row(a=None)]
df.where(df.a == 1).count() # 2L
df.where(df.a == None).count() # 0L
使用 Spark 1.3.1
可以使用Column.isNull
方法:
df.where(df.a.isNull()).count()
附带说明一下,这种行为是人们对 normal SQL query 的期望。由于 NULL
标记 "missing information and inapplicable information" [1],因此询问某物是否等于 NULL
是没有意义的。它只是缺少 IS
或 IS NOT
。\
Scala API 提供特殊的空安全相等 <=>
运算符,因此可以执行如下操作:
df.where($"a" <=> lit(null))
但如果你问我,这似乎不是个好主意。
在下面的示例中,df.a == 1
谓词 return 是正确的结果,但是 df.a == None
return 应该是 0 return 1.
l = [[1], [1], [2], [2], [None]]
df = sc.parallelize(l).toDF(['a'])
df # DataFrame[a: bigint]
df.collect() # [Row(a=1), Row(a=1), Row(a=2), Row(a=2), Row(a=None)]
df.where(df.a == 1).count() # 2L
df.where(df.a == None).count() # 0L
使用 Spark 1.3.1
可以使用Column.isNull
方法:
df.where(df.a.isNull()).count()
附带说明一下,这种行为是人们对 normal SQL query 的期望。由于 NULL
标记 "missing information and inapplicable information" [1],因此询问某物是否等于 NULL
是没有意义的。它只是缺少 IS
或 IS NOT
。\
Scala API 提供特殊的空安全相等 <=>
运算符,因此可以执行如下操作:
df.where($"a" <=> lit(null))
但如果你问我,这似乎不是个好主意。