PySpark中如何批量删除DataFrame中存在的指定列
在PySpark DataFrame中批量删除存在的指定列
你原来的代码写法有误,df.drop(*[drop_cols])会把整个drop_cols列表当成单个参数传递给drop方法,导致参数类型不匹配报错。
不用逐个判断列是否存在,直接用列表推导式筛选出同时存在于待删列表和DataFrame中的列,再批量删除即可,代码如下:
df = spark.createDataFrame([("Alice", 2), ("Bob", 5)], ("name", "age")) drop_cols = ["id", "age"] # 筛选出DataFrame中实际存在的待删除列 cols_to_drop = [col for col in drop_cols if col in df.columns] # 批量删除列 df = df.drop(*cols_to_drop)
说明
- 列表推导式
[col for col in drop_cols if col in df.columns]会自动过滤掉DataFrame中不存在的列(比如示例中的id),只保留真实存在的待删列(比如age)。 *cols_to_drop是将列表中的元素逐个作为参数传递给drop方法,符合PySparkdrop的参数要求(支持传入多个列名字符串)。
内容的提问来源于stack exchange,提问作者Panda
相关产品推荐
相关产品推荐

