繁体   English   中英

Pyspark:根据列名列表过滤 dataframe

[英]Pyspark: filter dataframe based on column name list

我正在寻找一种干净的方法来解决以下问题:我想过滤 dataframe 以仅包含为预定义的列名列表填充了至少一个值的行。

我不想做的是分别列出所有条件:

df.where(col('col1').isNotNull() | col('col2').isNotNull() | ...)

这种方法不可行,因为列名列表可能会变得非常大并且可能经常更改。

我现在的解决方案是在单独的 function 中组合条件:

def compose_condition(col_names):
   condition = False
   for col_name in col_names:
      condition = condition | col(col_name).isNotNull()
   return condition

然后用这个function的结果作为过滤条件:

my_col_names = ['col1', 'col2', 'col3']
df.where(compose_condition(my_col_names))

我的解决方案有其他选择吗?

您还可以使用 python functools.reduce将列名列表缩减为过滤条件:

from functools import reduce
from pyspark.sql.functions import col

df.where(reduce(lambda a, b: a.isNotNull() | b.isNotNull(), map(col, my_col_names)))

如果指定子集中的所有列都是 null,您可以使用dropna并指定how='all'来删除行:

df2 = df.dropna(how='all', subset=my_col_names)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM