Hinzufügen einer Spalte rowsums über eine Liste von Spalten in Spark-Dataframe
Ich habe eine Spark-dataframe mit mehreren Spalten. Ich möchte eine Spalte hinzufügen, die auf der dataframe, die eine Summe einer bestimmten Anzahl von Spalten.
Beispielsweise meine Daten sieht wie folgt aus:
ID var1 var2 var3 var4 var5
a 5 7 9 12 13
b 6 4 3 20 17
c 4 9 4 6 9
d 1 2 6 8 1
Möchte ich eine Spalte Hinzugefügt, die Summe der Zeilen für bestimmte Spalten:
ID var1 var2 var3 var4 var5 sums
a 5 7 9 12 13 46
b 6 4 3 20 17 50
c 4 9 4 6 9 32
d 1 2 6 8 10 27
Ich weiß, es ist möglich, fügen Sie Spalten zusammen, wenn man das spezifische Spalten hinzufügen:
val newdf = df.withColumn("sumofcolumns", df("var1") + df("var2"))
Ist es jedoch möglich, übergeben eine Liste von Spaltennamen und fügen Sie Sie zusammen? Basierend auf dieser Antwort, die im Grunde, was ich will, aber es ist mit Hilfe der python-API von scala (Fügen Sie eine Spalte Summe als neue Spalte in PySpark dataframe) ich denke, dass so etwas funktionieren würde:
//Select columns to sum
val columnstosum = ("var1", "var2","var3","var4","var5")
//Create new column called sumofcolumns which is sum of all columns listed in columnstosum
val newdf = df.withColumn("sumofcolumns", df.select(columstosum.head, columnstosum.tail: _*).sum)
Löst dies den Fehler mit dem Wert der Summe der nicht Mitglied der org.apache.spark.sql.DataFrame. Gibt es eine Möglichkeit, um die Summe über mehrere Spalten?
Vielen Dank im Voraus für Ihre Hilfe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie versuchen, die folgenden:
Dann ist das Ergebnis:
Schlicht und einfach:
mit Python-äquivalent:
Beiden wird standardmäßig " NA, wenn es einen fehlenden Wert in der Zeile. Sie können
DataFrameNaFunctions.fill
odercoalesce
Funktion zu vermeiden.Ich nehme an, Sie haben einen dataframe df. Dann können Sie die Summe aller Spalten, außer Ihre ID-col. Dies ist hilfreich, wenn Sie viele Spalten und Sie wollen nicht manuell zu erwähnen, die Namen aller Spalten, wie alle oben genannten. Dieser Beitrag hat die gleiche Antwort.
Hier ist eine elegante Lösung mit python:
Hoffentlich wird dies etwas beeinflussen ähnlich in der Funke ... wer?.