ich folgenden Datenrahmen habe (Wert in Array sind Strings):Spark-Dataframes: Liste in einer neuen Spalte anhängt (Python)
+--------------------+--------------------+
| col1| col2|
+--------------------+--------------------+
| [value1, value2]| [value3,value4]|
| [value5]| [value6]|
+--------------------+--------------------+
Wie kann ich eine neue Spalte mit einem neuen Array zu erstellen einschließlich aller beide Werte von
+--------------------+--------------------+------------------------------+
| col1| col2| new |
+--------------------+--------------------+------------------------------+
| [value1, value2]| [value3,value4]|[value1, value2,value3,value4]|
| [value5]| [value6]| [value5,value6]|
+--------------------+--------------------+------------------------------+
habe ich versucht, die folgenden:
def add_function(col1,col2):
return col1+col2
udf_add = udf(add_function,ArrayType(StringType()))
dftrial.withColumn("new",udf_add("col1","col2")).show(2)
es die Aufgabe macht, wie gewünscht. Aber ich verstehe nicht, warum, wenn ich den add_function
ändern:
def add_function(col1,col2):
return col1.extend(col2)
Es gibt null
Wert. Warum?
Und meine Hauptfrage: Gibt es eine andere Möglichkeit, diese Aufgabe zu implementieren, Any bereits implementierte Funktion? Ich fand concat
, aber es scheint, dass es nur für Strings funktioniert.
Danke für Ihre Antwort. Kannst du erklären, was ich niemals tun sollte? Weil ich es nicht genau verstanden habe und es scheint eine wichtige Information zu sein, die ich vermisse. –
'list.extend' modifiziert (mutiert) existierende' liste'. Tun Sie dies nicht mit Ihren Daten. Geben Sie immer ein neues Objekt zurück, es sei denn, dies ist explizit erlaubt (siehe 'RDD.fold',' RDD.aggregate', etc.) – zero323