In PySpark können wir nicht die traditionelle Pandas oder R-Stil-Notation verwenden, um neue Spalten basierend auf alten in einem DataFrame zu erstellen. Zum Beispiel, sagen, dass ich versuchen, zwei Spalten verketten:In PySpark DataFrames, warum ist __setitem__ nicht vollständig implementiert?
import pyspark.sql.functions as F
df['newcol'] = F.concat(df['col_1'], df['col_2'])
Ergebnis:
TypeError: 'DataFrame' object does not support item assignment
Stattdessen die implementierte Methode, dies zu tun, ist
df = df.withColumn('newcol', F.concat(df['col_1'], df['col_2']))
Gibt es einen Grund PySpark nicht Implementieren Sie die traditionelle DataFrame-Notation?
Ich denke, ich verstehe. Mit anderen Worten, traditionelle Datenrahmen sind veränderbare Objekte (Listen von Vektoren), während Spark DataFrames unveränderlich sind, da Spark innerhalb eines funktionalen Programmiermodells entworfen ist. "__setitem__" ist eine Mutation und nicht anwendbar auf ein unveränderliches Objekt. – Paul
Ja, genau ... Sie könnten es selbst und Affe Patch implementieren, aber es würde fischig riechen. – zero323