我对pyspark和使用Dataframe是个新手,我要做的是获得所有值为Null的列的子集.

我在网上看到的大多数示例都显示了特定列上的筛选函数.是否可以筛选整个数据框并显示包含至少1个空值的所有行?

推荐答案

如果您不关心哪些列为空,则可以使用循环来创建过滤条件:

from pyspark.sql import SparkSession
from pyspark.sql import functions as func

q1_df = spark\
    .createDataFrame([(None, 1, 2), (3, None, 4), (5, 6, None), (7, 8, 9)],
                     ['a', 'b', 'c'])
q1_df.show(5, False)
+----+----+----+
|a   |b   |c   |
+----+----+----+
|null|1   |2   |
|3   |null|4   |
|5   |6   |null|
|7   |8   |9   |
+----+----+----+


condition = (func.lit(False)) 
for col in q1_df.columns:
    condition = condition | (func.col(col).isNull())
q1_df.filter(condition).show(3, False)
+----+----+----+
|a   |b   |c   |
+----+----+----+
|null|1   |2   |
|3   |null|4   |
|5   |6   |null|
+----+----+----+

当您要查找任何一列为空的行时,可以使用OR条件.


编辑时间:2022-08-01

我之所以首先将条件声明为func.lit(False),只是为了简化我的代码,只是想创建一个"base"条件.事实上,这个过滤器在这个过滤器中没有任何用处.当您判断condition时,您将看到:

Column<'(((false OR (a IS NULL)) OR (b IS NULL)) OR (c IS NULL))'>

事实上,你可以使用其他方法来创造条件.例如:

for idx, col in enumerate(q1_df.columns):
    if idx == 0:
        condition = (func.col(col).isNull())
    else:
        condition = condition | (func.col(col).isNull())

condition
Column<'(((a IS NULL) OR (b IS NULL)) OR (c IS NULL))'>

或者,如果要过滤掉所有列中BOTH非NULL的行,在我的代码中,我将:

condition = (func.lit(True)) 
for col in q1_df.columns:
    condition = condition & (func.col(col).isNotNull())

只要你可以创建所有的过滤条件,你就可以消除func.lit(False).只想提醒一下,如果您像我一样创建"base"条件,请不要使用如下所示的python内置bool类型,因为它们不是同一类型(booleanspark column):

condition = False

for col in q1_df.columns:
    condition = condition | (func.col(col).isNull())

Python相关问答推荐

TARete错误:类型对象任务没有属性模型'

SQLGory-file包FilField不允许提供自定义文件名,自动将文件保存为未命名

追溯(最近最后一次调用):文件C:\Users\Diplom/PycharmProject\Yolo01\Roboflow-4.py,第4行,在模块导入roboflow中

将两只Pandas rame乘以指数

管道冻结和管道卸载

如何在polars(pythonapi)中解构嵌套 struct ?

两个pandas的平均值按元素的结果串接元素.为什么?

将输入聚合到统一词典中

python中的解释会在后台调用函数吗?

如何在FastAPI中为我上传的json文件提供索引ID?

在不同的帧B中判断帧A中的子字符串,每个帧的大小不同

OpenGL仅渲染第二个三角形,第一个三角形不可见

Pandas 数据帧中的枚举,不能在枚举列上执行GROUP BY吗?

没有内置pip模块的Python3.11--S在做什么?

如何将返回引用的函数与pybind11绑定?

获取git修订版中每个文件的最后修改时间的最有效方法是什么?

Pandas:将值从一列移动到适当的列

根据两个lambda条件筛选组并根据条件创建新列的最佳方式是什么?

为什么内置的sorted()对于一个包含降序数字的列表来说,如果每个数字连续出现两次,会变慢?

保存由PYTHON在EXCEL中所做更改的问题