首页 > 解决方案 > Spark 为每一列创建一个包含总和的行(如每一列的总计)

问题描述

我有一个看起来像这样的数据框

+-----------+-----------+-----------+
|salesperson|     device|amount_sold|
+-----------+-----------+-----------+
|       john|   notebook|          2|
|       gary|   notebook|          3|
|       john|small_phone|          2|
|       mary|small_phone|          3|
|       john|large_phone|          3|
|       john|     camera|          3|
+-----------+-----------+-----------+

我已经使用pivot函数将其转换为带有Total列的

+-----------+------+-----------+--------+-----------+-----+
|salesperson|camera|large_phone|notebook|small_phone|Total|
+-----------+------+-----------+--------+-----------+-----+
|       gary|     0|          0|       3|          0|    3|
|       mary|     0|          0|       0|          3|    3|
|       john|     3|          3|       2|          2|   10|
+-----------+------+-----------+--------+-----------+-----+

但我想要一个包含一行(Total)的数据框,其中还包含每一列的总数,如下所示:

+-----------+------+-----------+--------+-----------+-----+
|salesperson|camera|large_phone|notebook|small_phone|Total|
+-----------+------+-----------+--------+-----------+-----+
|       gary|     0|          0|       3|          0|    3|
|       mary|     0|          0|       0|          3|    3|
|       john|     3|          3|       2|          2|   10|
|      Total|     3|          3|       5|          5|   16|
+-----------+------+-----------+--------+-----------+-----+

使用 Scala/Python 可以做到这一点吗?(最好是 Scala 并使用 Spark),如果可能的话不要使用 Union

TIA

标签: pythonscalaapache-sparkapache-spark-sql

解决方案


使用 spark Scala,您可以使用以下代码片段来实现此目的。

// Assuming spark session available as variable named 'spark'
import spark.implicits._
val resultDF = df.withColumn("Total", sum($"camera", $"large_phone", $"notebook", $"small_phone"))

推荐阅读