我想在数据框中创建一个“Total”行。
这将添加除了uid单元格之外的所有行。
uid val1 val2 val3
3213 1 2 3
创建:
uid val1 val2 val3 Total
3213 1 2 3 6
所以,我需要过滤出UID,然后求和。但是,如果我在求和之前删除UID,那么在求和之后我将无法重新加入表(因为连接必须在UID上)。
我正在使用过滤器,但我找不到在过滤器中获取列名的方法。
所以到目前为止我所拥有的是:
val dfvReducedTotalled = dfvReduced.withColumn("TOTAL", dfvReduced.columns
.filter(col=> !col.?????? == "UID")
.map(c => col(c)).reduce((c1, c2) => c1 + c2))
答案 0 :(得分:3)
您可以先收集非uid
的列名,使用sum
构建reduce
个表达式,然后创建Total
列:
val row_sum_expr = df.columns.collect{ case x if x != "uid" => col(x) }.reduce(_ + _)
df.withColumn("Total", row_sum_expr).show
+----+----+----+----+-----+
| uid|val1|val2|val3|Total|
+----+----+----+----+-----+
|3213| 1| 2| 3| 6|
+----+----+----+----+-----+