Динамически переименовывать несколько столбцов в PySpark DataFrame

у меня есть фрейм данных в pyspark, который имеет 15 столбцов.

имя столбца id, name, emp.dno, emp.sal, state, emp.city, zip .....

теперь я хочу заменить имена столбцов, которые '.' в них '_'

как 'emp.dno' to 'emp_dno'

Я хотел бы сделать это динамически

как я могу достичь этого в pyspark?

1 ответов


вы можете использовать что-то подобное это отличное решение от @zero323:

df.toDF(*(c.replace('.', '_') for c in df.columns))

кроме того:

from pyspark.sql.functions import col

replacements = {c:c.replace('.','_') for c in df.columns if '.' in c}

df.select([col(c).alias(replacements.get(c, c)) for c in df.columns])

на replacement словарь тогда будет выглядеть так:

{'emp.city': 'emp_city', 'emp.dno': 'emp_dno', 'emp.sal': 'emp_sal'}

обновление:

если у меня есть dataframe с пробелом в именах столбцов, также как заменить оба!--5--> и пространство с '_'

import re

df.toDF(*(re.sub(r'[\.\s]+', '_', c) for c in df.columns))