Apache spark dataframe的Cube/Roll up函数,但在spark中跳过对少数记录的列求和

Apache spark dataframe的Cube/Roll up函数,但在spark中跳过对少数记录的列求和,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我有以下数据帧: +--------+------+---------+---------+ | Col1 | col2 | values1 | Values2 | +--------+------+---------+---------+ | item1 | A1 | 5 | 11 | | item1 | A2 | 5 | 25 | | item1 | A3 | 5 | 33 | | item1 | na

我有以下数据帧:

+--------+------+---------+---------+
|  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 |         |
+-------+------+---------+---------+
+-------+------+---------+---------+
| 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 |         |
+-------+------+---------+---------+
如何获得应用于此数据集的汇总或多维数据集函数,以便值1到Col1的总和应与(A1/A2/A3)+na的值相加= 例如:

第二行显示

值1=5=5+0和值2=87=11+25+33+18和第六行 值1=12=6+6和值2=12+26+34+0=72

但是我现在通过做汇总操作得到的是 将值1列中我不希望发生的所有agg相加

df.rollup("Col1","col2").agg(sum("values1") as "values1",sum("values2") as "values2");
电流输出:

+-------+------+---------+---------+
| 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 |         |
+-------+------+---------+---------+
+-------+------+---------+---------+
| 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的链接不是此处的实际提问。所需输出与链接中的答案不同)

我想尝试一下解决方案。请不要删除并重新发布,而要编辑相同的问题。附言:欺骗旗帜不是一种惩罚。不,以利亚萨。那个问题完全被打乱了。我应该重新编辑的。是的。如果你认为链接不起作用,你可以发表评论,我们将看到我们如何能够帮助或也许我会重新打开这个问题。当然会考虑所有这些进展。谢谢你提出来。@eliasah你标记为重复的链接与我要求的期望输出完全不同。你能不能看一下所需的输出和链接的答案。我会给解决方案一个尝试。请不要删除并重新发布,而要编辑相同的问题。附言:欺骗旗帜不是一种惩罚。不,以利亚萨。那个问题完全被打乱了。我应该重新编辑的。是的。如果你认为链接不起作用,你可以发表评论,我们将看到我们如何能够帮助或也许我会重新打开这个问题。当然会考虑所有这些进展。谢谢你提出来。@eliasah你标记为重复的链接与我要求的期望输出完全不同。你能看一下所需的输出一次和链接的答案。