转换和重命名1000+;有Pyspark的专栏?
我正在寻找最有效的方法来转换原始数据帧中可能存在或不存在的大量变量(100+)。列值为1字节。如果该值不为NULL,请使用值1重新编码。如果为NUll,则使用值0重新编码。然后重命名该列,以“U_”开头 我的代码可以工作,但效率非常低。我是Pyspark的新手,可以使用一些指针转换和重命名1000+;有Pyspark的专栏?,pyspark,transform,rename,Pyspark,Transform,Rename,我正在寻找最有效的方法来转换原始数据帧中可能存在或不存在的大量变量(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 : i
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)
例如:
如注释中所述,尝试使用带有select的表达式:
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)
使用列多次调用
,速度非常慢。而是使用选择
执行所有转换,只需使用别名
重命名列即可。退房谢谢!这正是我所需要的。不客气,如果答案有帮助,请投票!