Pochodzę z tła pand i jestem przyzwyczajony do czytania danych z plików CSV do ramki danych, a następnie po prostu zmieniając nazwy kolumn na coś użytecznego za pomocą prostego polecenia:
df.columns = new_column_name_list
Jednak to samo nie działa w ramkach danych pyspark utworzonych za pomocą sqlContext. Jedynym rozwiązaniem, które udało mi się wymyślić, aby to zrobić z łatwością, jest:
df = sqlContext.read.format("com.databricks.spark.csv").options(header='false', inferschema='true', delimiter='\t').load("data.txt")
oldSchema = df.schema
for i,k in enumerate(oldSchema.fields):
k.name = new_column_name_list[i]
df = sqlContext.read.format("com.databricks.spark.csv").options(header='false', delimiter='\t').load("data.txt", schema=oldSchema)
Jest to w zasadzie dwukrotne zdefiniowanie zmiennej i najpierw wywnioskowanie schematu, a następnie zmiana nazw kolumn, a następnie ponowne załadowanie ramki danych zaktualizowanym schematem.
Czy istnieje lepszy i bardziej wydajny sposób na zrobienie tego tak, jak robimy to w pandach?
Moja wersja Spark to 1.5.0
źródło
for
pętlą +withColumnRenamed
, ale twojareduce
opcja jest bardzo fajna :)from functools import reduce
Zaleta korzystania z tego sposobu: Przy długiej liście kolumn chciałbyś zmienić tylko kilka nazw kolumn. Może to być bardzo wygodne w tych scenariuszach. Bardzo przydatne podczas łączenia tabel ze zduplikowanymi nazwami kolumn.
źródło
Jeśli chcesz zmienić nazwy wszystkich kolumn, spróbuj
df.toDF(*cols)
źródło
df = df.toDF(*my_pandas_df.columns)
cols
są nowymi nazwami kolumn i po prostu zakładając, że kolejność nazwcols
odpowiada kolejności kolumn ramki danych?Jeśli chcesz zastosować prostą transformację do wszystkich nazw kolumn, ten kod załatwi sprawę: (Zastępuję wszystkie spacje znakiem podkreślenia)
Dzięki @ user8117731 za
toDf
podstęp.źródło
Jeśli chcesz zmienić nazwę jednej kolumny i zachować resztę taką, jaka jest:
źródło
df.withColumnRenamed('age', 'age2')
źródło
withColumnRenamed
.to podejście zastosowałem:
utwórz sesję pyspark:
utwórz ramkę danych:
zobacz df z nazwami kolumn:
utwórz listę z nowymi nazwami kolumn:
zmień nazwy kolumn df:
zobacz df z nowymi nazwami kolumn:
źródło
Stworzyłem łatwą w użyciu funkcję zmiany nazwy wielu kolumn dla ramki danych pyspark, na wypadek, gdyby ktoś chciał z niej skorzystać:
źródło
old_columns
byłby taki sam jakdf.columns
.Inny sposób zmiany nazwy tylko jednej kolumny (przy użyciu
import pyspark.sql.functions as F
):źródło
Używam tego:
źródło
Możesz użyć następującej funkcji, aby zmienić nazwę wszystkich kolumn ramki danych.
Jeśli musisz zaktualizować tylko kilka nazw kolumn, możesz użyć tej samej nazwy kolumny na liście replace_with
Aby zmienić nazwę wszystkich kolumn
Aby zmienić nazwę niektórych kolumn
źródło
W przypadku zmiany nazwy pojedynczej kolumny nadal można użyć funkcji toDF (). Na przykład,
źródło
Możemy użyć różnych metod, aby zmienić nazwę nazwy kolumny.
Najpierw utwórzmy prosty DataFrame.
Teraz spróbujmy zmienić nazwę col_1 na col_3. PFB kilka podejść do tego samego.
Oto wynik.
Mam nadzieję, że to pomoże.
źródło