首页 > 解决方案 > 使用 Pyspark 转换和重命名 1,000 多列的最有效方法?

问题描述

我正在寻找最有效的方法来转换我的原始数据框中可能存在或不存在的大量变量(100+)。列值为 1 个字节。如果该值不为 NULL,则使用值 1 重新编码。如果为 NULL,则使用值 0 重新编码。然后重命名列以以“U_”开头。

我的代码有效,但效率极低。我是 Pyspark 编码的新手,可以使用一些指针。

update_vars_list = [ 'Col_1','Col_2','Col_3',...'Col_n]                   
for var in update_vars_list :
    if var in original_df.columns:
        original_df= original_df.withColumn(('U_'+var),f.when(f.col(var).isNotNull(),1).otherwise(0)).drop(var)

例子:

在此处输入图像描述

标签: pysparktransformrename

解决方案


正如评论中提到的,尝试使用带有选择的表达式:

expr = [ f.when(f.col(var).isNotNull(),1).otherwise(0).alias('U_'+var) for var in update_vars_list if var in original_df.columns]
df = original_df.select(*expr)

推荐阅读