У меня есть следующий фрейм данных:
+--------+------+---------+---------+
| 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 | |
+-------+------+---------+---------+
Как можно получить функцию свертки или куба, примененную к этому набору данных, чтобы сумма значений от 1 до Col1 суммировала значения для (A1 / A2 / A3) + na =
например, для:
второй ряд показывает
значения1 = 5 = 5 + 0 и значения2 = 87 = 11 + 25 + 33 + 18 и 6-й ряд
значения1 = 12 = 6 + 6 и значения2 = 12 + 26 + 34 + 0 = 72
Но то, что я сейчас получаю, выполняя операцию свертки, это
Суммирует все агг, которого я не хочу, чтобы столбец values1 .
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, здесь не соответствует действительности. Здесь желаемый результат отличается от ответов в ссылке)