Пример кадра данных:
+----+-------+-----+-------+-----+
|year|country|state|college|marks|
+----+-------+-----+-------+-----+
|2019| India| A| AC| 15|
|2019| India| A| AC| 25|
|2019| India| A| AC| 35|
|2019| India| A| AD| 40|
|2019| India| B| AC| 15|
|2019| India| B| AC| 50|
|2019| India| B| BC| 65|
|2019| USA| A| UC| 15|
|2019| USA| A| UC| 65|
|2019| USA| A| UD| 45|
|2019| USA| B| UC| 44|
|2019| USA| B| MC| 88|
|2019| USA| B| MC| 90|
|2020| India| A| AC| 65|
|2020| India| A| AC| 33|
|2020| India| A| AC| 55|
|2020| India| A| AD| 70|
|2020| India| B| AC| 88|
|2020| India| B| AC| 60|
|2020| India| B| BC| 45|
|2020| USA| A| UC| 85|
|2020| USA| A| UC| 55|
|2020| USA| A| UD| 32|
|2020| USA| B| UC| 64|
|2020| USA| B| MC| 78|
|2020| USA| B| MC| 80|
+----+-------+-----+-------+-----+
Чтобы выполнить многомерное агрегирование, вы можете сделать это двумя способами: с помощью группирования наборов или с помощью свертки в Spark. Чтобы узнать больше об этой многомерной агрегации, перейдите по этой ссылке Многомерная агрегация
Решение с использованием свертки предоставляется следующим образом:
val ans_df = df.rollup("year","country","state","college").agg(max("marks").as("Marks"))
Результат:
+----+-------+-----+-------+-----+
|year|country|state|college|Marks|
+----+-------+-----+-------+-----+
|2020| India| A| AC| 65|
|2019| India| B| BC| 65|
|2020| India| B| null| 88|
|2019| USA| B| UC| 44|
|2020| India| B| AC| 88|
|2020| USA| null| null| 85|
|2019| India| A| AC| 35|
|2019| USA| B| MC| 90|
|2019| India| A| AD| 40|
|2019| USA| A| UD| 45|
|2019| USA| null| null| 90|
|2020| USA| A| UD| 32|
|null| null| null| null| 90|
|2019| USA| B| null| 90|
|2020| India| null| null| 88|
|2019| USA| A| null| 65|
|2019| India| B| null| 65|
|2019| USA| A| UC| 65|
|2020| India| B| BC| 45|
|2020| USA| B| UC| 64|
+----+-------+-----+-------+-----+
Более того, по запросу спарк гарантирует оптимальное выполнение этой операции и использует уже разбитые данные при выполнении groupBy для дополнительного столбца. Пример - при выполнении groupBy по ключу (год, страна , штат, колледж) будут использованы данные, уже сгруппированные по ключу (год, страна, штат), что позволит значительно сократить объем вычислений.