2017-01-14 34 views
5

Mam ramkę danych w pyspark, który ma 15 kolumn.Dynamiczna zmiana nazwy wielu kolumn w PySpark DataFrame

Nazwa kolumny są id, name, emp.dno, emp.sal, state, emp.city, zip .....

Teraz chcę wymienić nazwy kolumn, które mają '.' w nich '_'

Ci się 'emp.dno' do 'emp_dno'

Chciałbym zrobić to dynamicznie

Jak mogę to osiągnąć w pyspark?

Odpowiedz

11

Można użyć coś podobnego do this great solution from @zero323:

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

alternatywnie:

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]) 

Słownik replacement następnie wyglądałby następująco:

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

UPDATE:

jeśli mam dataframe z przestrzeni nazw kolumn także w jaki sposób zastąpić zarówno '.' i przestrzeń z '_'

import re 

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

@Virureddy, można zakładać moc 'print (df.columns) "jak to jest? – MaxU

+0

@Virureddy, dziękuję! A jak wygląda "print (zamienniki)"? – MaxU

+0

@Virureddy, spróbuj tego: 'df.toDF ([c.replace ('.', '_') Dla c in df.columns])' – MaxU