Heim >Backend-Entwicklung >Python-Tutorial >Wie füge ich konstante Spalten zu Spark DataFrames hinzu?
Hinzufügen von konstanten Spalten zu Spark-DataFrames
Bei der Arbeit mit Spark-DataFrames gibt es Szenarien, in denen man möglicherweise eine konstante Spalte mit a hinzufügen muss Fester Wert für jede Zeile. Ein häufiger Fehler besteht jedoch darin, withColumn direkt zu verwenden, was zum Hinzufügen berechneter Spalten gedacht ist.
Fehler mit withColumn
Wenn Sie versuchen, eine konstante Spalte direkt mit hinzuzufügen withColumn wird ein Fehler ähnlich dem folgenden auftreten:
AttributeError: 'int' object has no attribute 'alias'
Dies liegt daran, dass withColumn als zweites ein Column-Objekt erwartet Argument, das einen berechneten Ausdruck darstellt. Ein konstanter Wert, beispielsweise eine ganze Zahl, ist keine Spalte.
Lösung
Um eine konstante Spalte korrekt hinzuzufügen, verwenden Sie die lit-Funktion, um einen Literalwert zu erstellen. Diese Funktion verwendet den konstanten Wert als Argument und gibt ein Spaltenobjekt zurück:
from pyspark.sql.functions import lit
df.withColumn('new_column', lit(10))
Komplexe Spalten
Für komplexere konstante Werte wie Arrays oder Strukturen können Sie Folgendes verwenden Funktionen:
Beispiel:
from pyspark.sql.functions import array, struct, create_map df.withColumn("some_array", array(lit(1), lit(2), lit(3))) df.withColumn("some_struct", struct(lit("foo"), lit(1), lit(.3))) df.withColumn("some_map", create_map(lit("key1"), lit(1), lit("key2"), lit(2)))
Alternative Ansätze
In Spark-Versionen 2.2 und höher kann die typedLit-Funktion auch verwendet werden, um konstante Spalten für unterstützte Datentypen wie Sequenzen, Karten und Tupel zu erstellen.
Eine weitere Alternative ist um eine UDF zu verwenden, obwohl dies langsamer ist als die Verwendung der oben genannten integrierten Funktionen.
Das obige ist der detaillierte Inhalt vonWie füge ich konstante Spalten zu Spark DataFrames hinzu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!