在 DF 中的所有剩余列上使用 .withColumn

Using .withColumn on all remaining columns in DF

我想匿名化或替换 pyspark 数据框中的几乎所有列,少数列除外。

我知道可以这样做:


anonymized_df = employee_df.withColumn("EMPLOYEENUMBER", col("EMPLOYEENUMBER"))\
                                        .withColumn("NAME1", lit(""))\
                                        .withColumn("TELEPHONE", lit(""))\
                                        .withColumn("ELECTRONICMAILADDRESS", lit(""))


但是,对所有列执行此操作是一个繁琐的过程。我宁愿按照以下方式做一些事情:

anonymized_df = employee_df.withColumn("EMPLOYEENUMBER", col("EMPLOYEENUMBER"))\
                           .withcolumn("*", lit("")) # all other columns replace 

但这似乎不起作用。是否有其他解决方法可以实现此目的?

我想一个解决方案是可以创建一个列名列表并按照以下方式做一些事情:

col_list = ['col1', 'col2', 'col3', 'col4', 'col5', 'col6']

for col in col_list:
   employee_df= employee_df.withColumn(col, lit("")))

其他建议会很有帮助。

您可以使用 select。 syntax-wise 差别不大,但只会创建 1 个快照。

keep_cols = ['a', 'b', 'c']
empty_cols = ['d', 'e', 'f'] # or list(set(df.columns) - set(keep_cols))

df = df.select(*keep_cols, *[lit('').alias(x) for x in empty_cols])