使用正则表达式过滤PySpark数据帧的列(按名称)

使用正则表达式过滤PySpark数据帧的列(按名称),pyspark,Pyspark,我有一个带有3k-4k列的Spark数据框,我想删除名称符合某些变量条件的列,例如,其中ColumnName如“foo” 要获取列名,可以使用df。columns和drop()支持在一次调用中删除多个列。下面的代码使用了这两种方法并完成了您需要的操作: condition = lambda col: 'foo' in col new_df = df.drop(*filter(condition, df.columns)) 这绝对解决了我的问题,但我不明白语法。filter I解释为包含“*fo

我有一个带有3k-4k列的Spark数据框,我想删除名称符合某些变量条件的列,例如,其中ColumnName如“foo”

要获取列名,可以使用
df。columns
drop()
支持在一次调用中删除多个列。下面的代码使用了这两种方法并完成了您需要的操作:

condition = lambda col: 'foo' in col
new_df = df.drop(*filter(condition, df.columns))

这绝对解决了我的问题,但我不明白语法。filter I解释为包含“*foo”的任何列,但事实并非如此。foo似乎被视为子字符串,即*foo。您能指出详细说明此方法的文档吗?感谢您的帮助。
filter
是python中内置的方法,比任何可过滤的集合都要有用。您可以在这里找到文档:您不应该分配lambda,只需使用:
new_df=df.drop(*过滤器(lambda col:foo'in col,df.columns))