在所有列聚合之后重命名所有列

时间:2018-08-29 17:47:57

标签: python apache-spark dataframe pyspark aggregate

我使用类似这样的代码对数据帧中的所有列进行汇总求和:

   df_aggregated = df.groupBy('key').sum()

结果列已将其名称更改为如下模式:

   sum(colum1), sum(colum2)

我需要将所有新列的名称更改为以前的名称

我尝试使用'alias',但是列太多了,我想要更自动的东西

1 个答案:

答案 0 :(得分:3)

您可以使用此功能。任何聚合都具有相同的模式:xxx(column_name) 如果您有模式,请使用正则表达式进行匹配。

import re

def rename_columns_after_any_aggregation(df):
    for name in df.schema.names:
        clear_name = ''
        m = re.search('\((.*?)\)', name)
        if m:
            clear_name = m.group(1)
            df = df.withColumnRenamed(name, clear_name)

    return df