如何在pyspark数据框中返回具有空值的行?

dg *_*g S 2 python bigdata apache-spark-sql pyspark pyspark-sql

我试图从pyspark数据框中获取具有空值的行。在熊猫中,我可以isnull()在数据框上使用以下方法实现此目的:

df = df[df.isnull().any(axis=1)]
Run Code Online (Sandbox Code Playgroud)

但是在PySpark的情况下,当我在以下命令下运行时,它将显示Attributeerror:

df.filter(df.isNull())
Run Code Online (Sandbox Code Playgroud)

AttributeError:“ DataFrame”对象没有属性“ isNull”。

如何在不检查每一列的情况下获取具有空值的行?

Ama*_*nda 5

您可以筛选与行wherereduce以及列表理解。例如,给定以下数据框:

df = sc.parallelize([
    (0.4, 0.3),
    (None, 0.11),
    (9.7, None), 
    (None, None)
]).toDF(["A", "B"])

df.show()
+----+----+
|   A|   B|
+----+----+
| 0.4| 0.3|
|null|0.11|
| 9.7|null|
|null|null|
+----+----+
Run Code Online (Sandbox Code Playgroud)

使用以下方法null可以对行进行过滤:

import pyspark.sql.functions as f
from functools import reduce

df.where(reduce(lambda x, y: x | y, (f.col(x).isNull() for x in df.columns))).show()
Run Code Online (Sandbox Code Playgroud)

这使:

+----+----+
|   A|   B|
+----+----+
|null|0.11|
| 9.7|null|
|null|null|
+----+----+
Run Code Online (Sandbox Code Playgroud)

在条件语句中,您必须指定是否有(或,|),所有(和,&)等。