首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何有效地批量重命名pyspark中的列?

如何有效地批量重命名pyspark中的列?
EN

Stack Overflow用户
提问于 2019-06-22 00:34:43
回答 3查看 244关注 0票数 1

我正尝试在PySpark中批量重命名我的列,从:

代码语言:javascript
复制
 'collect_list(Target_Met_1)[1]' --> 'AB11'
 'collect_list(Target_Met_1)[2]' --> 'AB12'
 'collect_list(Target_Met_2)[1]' --> 'AB21'
 'collect_list(Target_Met_1)[150]' --> 'AB150'

我如何以编程方式在中处理它?现在,我可以使用以下命令手动更改名称:

代码语言:javascript
复制
df.withColumnRenamed('collect_list(Target_Met_1)[1]', 'AB11')

但是如果我有500列,效率就不高。我知道重命名它的另一种方法是使用像udf这样的东西,但我想不出最好的方法。

我拆分了列,这不是问题所在。问题在于重命名该列。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-06-22 02:50:30

不要紧。弄清楚了。本质上,我必须使用列表理解来重命名列。我正在拆分上面链接中提到的列。这就是它起到的作用:

代码语言:javascript
复制
df = df.select('1', '2', '3', *[df[col][i].alias("AB" + str(i + 1) + col) for col in columns for i in range(max_dict[col])])
票数 1
EN

Stack Overflow用户

发布于 2020-12-27 02:32:34

要重命名所有列,可以使用toDf方法

代码语言:javascript
复制
import re

df.toDF(*['AB' + ''.join(re.findall('\d+', i)) for i in df.columns])
票数 0
EN

Stack Overflow用户

发布于 2021-04-23 08:13:44

像这样的东西也会有帮助。它是一个重命名功能,类似于Pandas的重命名功能。

代码语言:javascript
复制
def rename_cols(map_dict):
  """
  Rename a bunch of columns in a data frame
  :param map_dict: Dictionary of old column names to new column names
  :return: Function for use in transform
  """
  def _rename_cols(df):
    for old, new in map_dict.items():
      df = df.withColumnRenamed(old, new)
    return df
  return _rename_cols

你可以像这样使用它

代码语言:javascript
复制
spark_df.transform(rename_cols(dict(old1='new1', old2='new2', old3='new3')))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56707359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档