首页 文章

如何在pyspark数据帧中返回Null值的行?

提问于
浏览
0

我试图从pyspark数据帧获取具有空值的行 . 在pandas中,我可以在数据帧上使用isnull()来实现这一点

df = df[df.isnull().any(axis=1)]

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

df.filter(df.isNull())

AttributeError:'DataFrame'对象没有属性'isNull' .

如何获取具有空值的行而不检查每列?

1 回答

  • 0

    您可以使用 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|
    +----+----+
    

    ,过滤具有一些 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()
    

    这使:

    +----+----+
    |   A|   B|
    +----+----+
    |null|0.11|
    | 9.7|null|
    |null|null|
    +----+----+
    

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

相关问题