我有一个Spark dataframe,其中包含多列数据。我想添加一列到dataframe中,该列是某些列的和。
例如,我的数据如下:
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
我希望添加一列来对特定列的行求和:
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
我知道如果你知道要相加的具体列,就可以把它们加在一起:
val newdf = df.withColumn("sumofcolumns", df("var1") + df("var2"))
但是,是否可能传递一列列名并将它们相加?基于这个答案,它基本上是我想要的,但它使用的是 Python API 而不是 Scala(在 PySpark 数据帧中添加列总和作为新列),我认为像这样的东西会起作用:
//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)
这会抛出错误信息:值sum不是org.apache.spark.sql.DataFrame的成员。是否有一种方法可以对列求和?
非常感谢您的帮助。