[英]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.