首页 > 解决方案 > 数据框的多维数据集/汇总功能,但跳过火花中少数记录的列的总和

问题描述

我有以下数据框:

+--------+------+---------+---------+
|  Col1  | col2 | values1 | Values2 |
+--------+------+---------+---------+
| item1  | A1   |       5 |      11 |
| item1  | A2   |       5 |      25 |
| item1  | A3   |       5 |      33 |
| item1  | na   |         |      18 |
| item2  | A1   |       6 |      12 |
| item2  | A2   |       6 |      26 |
| item2  | A3   |       6 |      34 |
| item2  | na   |       6 |         |
+--------+------+---------+---------+

可以使用此代码创建

df = Seq(
        (item1, A1,5 ,11),
        (item1, A2,5 ,25),
        (item1, A3,5 ,33),
        (item1, na,0,18),
        (item2, A1,6 ,12),
        (item2, A2,6 ,26),
        (item2, A3,6 ,34),
        (item2, na,6 ,0)).toDF('Col1', 'col2', 'values1', 'Values2');

我想在对其进行汇总或多维数据集时跳过为所有记录添加列值1。

我想要的输出:

+-------+------+---------+---------+
| Col1  | col2 | values1 | values2 |
+-------+------+---------+---------+
| null  | null |      17 |     159 |
| item1 | null |       5 |      87 |
| item1 | A1   |       5 |      11 |
| item1 | A2   |       5 |      25 |
| item1 | A3   |       5 |      33 |
| item1 | na   |       0 |      18 |
| item2 | null |      12 |      72 |
| item2 | A1   |       6 |      12 |
| item2 | A2   |       6 |      26 |
| item2 | A3   |       6 |      34 |
| item2 | na   |       6 |         |
+-------+------+---------+---------+

如何获得应用于此数据集的汇总或多维数据集函数,以便 values1 到 Col1 的总和应该总结 (A1/A2/A3)+na= 的值,例如:

第二行显示

values1 =5= 5+0 and values2 = 87=11+25+33+18 and the 6th row values1 =12=6+6 and values2 =12+26+34+0=72

但是我现在通过进行汇总操作得到的是将所有我不想为values1列发生的 agg 加起来。

df.rollup("Col1","col2").agg(sum("values1") as "values1",sum("values2") as "values2");

电流输出:

+-------+------+---------+---------+
| Col1  | col2 | values1 | values2 |
+-------+------+---------+---------+
| null  | null |      39 |     159 |
| item1 | null |      15 |      87 |
| item1 | A1   |       5 |      11 |
| item1 | A2   |       5 |      25 |
| item1 | A3   |       5 |      33 |
| item1 | na   |       0 |      18 |
| item2 | null |      24 |      72 |
| item2 | A1   |       6 |      12 |
| item2 | A2   |       6 |      26 |
| item2 | A3   |       6 |      34 |
| item2 | na   |       6 |         |
+-------+------+---------+---------+

(作为 dup 发布的链接不是这里的实际问题。所需的输出与链接中的答案不同)

标签: apache-sparkapache-spark-sql

解决方案


推荐阅读