Ich komme aus dem Pandas-Hintergrund und bin es gewohnt, Daten aus CSV-Dateien in einen Datenrahmen zu lesen und dann einfach die Spaltennamen mit dem einfachen Befehl in etwas Nützliches zu ändern:
df.columns = new_column_name_list
Dies funktioniert jedoch nicht in pyspark-Datenrahmen, die mit sqlContext erstellt wurden. Die einzige Lösung, die ich finden könnte, um dies leicht zu tun, ist die folgende:
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)
Dies bedeutet im Grunde, die Variable zweimal zu definieren und zuerst auf das Schema zu schließen, dann die Spaltennamen umzubenennen und dann den Datenrahmen erneut mit dem aktualisierten Schema zu laden.
Gibt es einen besseren und effizienteren Weg, dies zu tun, wie wir es bei Pandas tun?
Meine Funkenversion ist 1.5.0
quelle
for
Schleife + gemachtwithColumnRenamed
, aber Ihrereduce
Option ist sehr schön :)from functools import reduce
Vorteil dieser Verwendung: Bei einer langen Liste von Spalten möchten Sie nur wenige Spaltennamen ändern. Dies kann in diesen Szenarien sehr praktisch sein. Sehr nützlich beim Verknüpfen von Tabellen mit doppelten Spaltennamen.
quelle
Wenn Sie alle Spaltennamen ändern möchten, versuchen Sie es
df.toDF(*cols)
quelle
df = df.toDF(*my_pandas_df.columns)
cols
die neuen Spaltennamen verwendet werden und nur angenommen wird, dass die Reihenfolge der Namen incols
der Spaltenreihenfolge des Datenrahmens entspricht?Wenn Sie eine einfache Transformation auf alle Spaltennamen anwenden möchten, führt dieser Code den folgenden Trick aus: (Ich ersetze alle Leerzeichen durch Unterstriche.)
Danke an @ user8117731 für den
toDf
Trick.quelle
Wenn Sie eine einzelne Spalte umbenennen und den Rest unverändert lassen möchten:
quelle
df.withColumnRenamed('age', 'age2')
quelle
withColumnRenamed
.Dies ist der Ansatz, den ich verwendet habe:
Pyspark-Sitzung erstellen:
Datenrahmen erstellen:
Ansicht df mit Spaltennamen:
Erstellen Sie eine Liste mit neuen Spaltennamen:
Ändern Sie die Spaltennamen des df:
Ansicht df mit neuen Spaltennamen:
quelle
Ich habe eine benutzerfreundliche Funktion zum Umbenennen mehrerer Spalten für einen pyspark-Datenrahmen erstellt, falls jemand sie verwenden möchte:
quelle
old_columns
wäre das gleiche wiedf.columns
.Eine andere Möglichkeit, nur eine Spalte umzubenennen (mit
import pyspark.sql.functions as F
):quelle
Ich benutze dieses:
quelle
Mit der folgenden Funktion können Sie alle Spalten Ihres Datenrahmens umbenennen.
Wenn Sie nur die Namen einiger Spalten aktualisieren müssen, können Sie denselben Spaltennamen in der Liste replace_with verwenden
Um alle Spalten umzubenennen
Um einige Spalten umzubenennen
quelle
Für eine einzelne Spaltenumbenennung können Sie weiterhin toDF () verwenden. Beispielsweise,
quelle
Wir können verschiedene Ansätze verwenden, um den Spaltennamen umzubenennen.
Erstellen Sie zunächst einen einfachen DataFrame.
Versuchen wir nun, col_1 in col_3 umzubenennen. PFB einige Ansätze, um das gleiche zu tun.
Hier ist die Ausgabe.
Ich hoffe das hilft.
quelle