如何从DF中获取pyspark(spark)中不包含值None的行

2024-04-27 18:01:08 发布

您现在位置:Python中文网/ 问答频道 /正文

在下面的示例中,df.a == 1谓词返回正确的结果,但是df.a == None在应该返回1时返回0。

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


Tags: none示例dataframedfcountwheresparkrow
1条回答
网友
1楼 · 发布于 2024-04-27 18:01:08

您可以使用^{}方法:

df.where(df.a.isNull()).count()

另一方面,这种行为是可以从normal SQL query中得到的。因为NULL标记了“丢失的信息和不适用的信息”[1],所以询问某个值是否等于NULL是没有意义的。它要么IS要么IS NOT丢失

Scala API提供了特殊的空安全等式<=>运算符,因此可以执行以下操作:

df.where($"a" <=> lit(null))

但如果你问我,这看起来不是个好主意。

1.Wikipedia, Null (SQL)

相关问题 更多 >