pyspark - 使用 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)
例子:
解决方案
正如评论中提到的,尝试使用带有选择的表达式:
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)
推荐阅读
- python - Unknown type of equation in dsolve
- python - How to import multiple different import using importlib on python?
- python - How to convert nested object to nested dictionary in python
- reactjs - 使用打字稿时,我应该为反应组件使用函数还是箭头函数?
- kotlin - Run Gradle-built App Continuously (as server daemon) even after logoff
- rust - 通过 Rc 时出错
作为函数参数 - slurm - 捕获 SLURM 批处理脚本中使用的电子邮件地址
- python - 通过 Colab Notebook 连接到托管在 Google Drive 上的 .sql 数据库
- asp.net-core - Settings inside secrets.json did not load in ASP.NET Core Blazor webassembly
- javascript - 我在 discord.js 中播放声音时遇到问题