【问题标题】:Most efficient way to transform and rename 1,000+ columns with Pyspark?使用 Pyspark 转换和重命名 1,000 多个列的最有效方法?
【发布时间】:2020-10-29 03:09:38
【问题描述】:

我正在寻找最有效的方法来转换我的原始数据框中可能存在或不存在的大量变量(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)

例子:

【问题讨论】:

  • 多次调用withColumn非常慢。而是使用select 进行所有转换,然后简单地使用alias 重命名您的列。查看this answer

标签: pyspark transform rename


【解决方案1】:

如 cmets 中所述,尝试使用带有 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)

【讨论】:

  • 谢谢!这正是我所需要的。
  • 不客气,如果有帮助请点赞!
猜你喜欢
  • 2016-12-12
  • 2014-09-03
  • 2018-10-26
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 2019-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多