#python #dataframe #pyspark #null #sdf
#python #фрейм данных #pyspark #null #sdf
Вопрос:
У меня есть sdf с идентификатором (PK) и несколькими столбцами, последний из которых может содержать нулевые значения. Я хотел бы найти эффективный способ фильтрации строк, в столбцах которых есть хотя бы одно значение.
Допустим, вот таблица:
----------- ------- ------- -------
| id| clm_01| clm_02| clm_03|...
----------- ------- ------- ------- -
| 10001 | null| null | 5|...
| 10002 | 1| 3 | 2|...
| 10003 | null| null | null|...
...
----------- ------- ------- -------
Из приведенной выше таблицы я хотел бы получить строку с идентификатором 10003.
Это можно легко сделать с помощью приведенного ниже сценария;
sdf.withColumn(
'flg',
when(
col('clm_01').isNull() amp; col('clm_02').isNull() amp; col('clm_01').isNull(),1).
otherwise(0)
).
filter(col('flg') != 1)
Но как вы применяете условие к большему количеству столбцов, не повторяя цепочку isNull() сто раз?
Заранее спасибо за помощь.
Ответ №1:
Вы можете использовать coalesce
least
greatest
функции или . Они возвращаются null
, если все столбцы null
:
from pyspark.sql import functions as F
columns = list(set(sdf.columns) - {'id'})
sdf = sdf.filter(F.coalesce(*columns).isNull())
или таким образом только с coalesce
:
sdf = sdf.filter(F.coalesce(*sdf.columns) == F.col('id'))