Динамически переименовывать несколько столбцов в 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))