python - 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
解决方案
使用 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"))
推荐阅读
- python - 看不懂带数字去掉单词的代码
- node.js - Discord bot 如何创建私人文本频道
- python - 如何在python中将两个列表转换为没有['xxx']标签的数据框?
- php - 在for循环中重复数组
- javascript - 如果没有用户交互,Chrome popstate 不会在返回按钮上触发
- javascript - 仅当悬停在另一个元素上时如何以闪亮的方式显示浮动元素
- python - RandomForest 是否需要标准化?
- node.js - node.js 中的“npm start”不起作用
- concurrency - 在 OCaml 中使用 Lwt 时如何进行循环中断
- python-3.x - 熊猫如果不工作。尝试了几个选项,但仍然得到不同的错误