Cube / Roll up Функция dataframe, но пропустить суммирование столбца для нескольких записей в искре - PullRequest
1 голос
/ 06 марта 2019

У меня есть следующий фрейм данных:

+--------+------+---------+---------+
|  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, здесь не соответствует действительности. Здесь желаемый результат отличается от ответов в ссылке)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...