У меня есть датафрейм с 5 столбцами.Теперь мне нужно получить максимум минут для каждой категории имени.Я попробовал следующий подход, но мне нужно сгруппировать каждый раз для каждой категории столбцов.Есть ли лучший способ получить результат за один шаг, а не группировать несколько раз?
val customers = sc.parallelize(Seq(("Alice", "abc","cat1","pt1", 50.00),
("Alice", "abc","cat1","pt1", 45.00),
("Alice", "bcd","cat2","pt1", 55.00),
("Bob", "abc","cat1","pt4", 25.00),
("Bob", "bcd","cat1","pt4", 29.00),
("Bob", "av","cat4","pt4",27.00))).toDF("name","nw","cat","pt","min")
val wSpec1 = Window.partitionBy("name","nw").orderBy("min")
val wSpec2 = Window.partitionBy("name","cat").orderBy("min")
val wSpec3 = Window.partitionBy("name","pt").orderBy("min")
val test1 = customers.withColumn("sumnt",sum(customers("min")).over(wSpec1))
val test2 = customers.withColumn("sumct",sum(customers("min")).over(wSpec2))
val test3 = customers.withColumn("sumpt",sum(customers("min")).over(wSpec3))
val data1 = test1.groupBy("name","nw").agg(max($"sumnt"))
val data2 = test2.groupBy("name","cat").agg(max($"sumct"))
val data3 = test3.groupBy("name","pt").agg(max($"sumpt"))
val res = data1.join(data2,Seq("name"),"left").join(data3,Seq("name"),"left")
+-----+---+-----------+
| name| nw|max(sumnt)|
+-----+---+-----------+
|Alice|bcd| 55.0|
| Bob| av| 27.0|
| Bob|bcd| 29.0|
|Alice|abc| 95.0|
| Bob|abc| 25.0|
+-----+---+-----------+
После выполнения отдельных действий и объединения я получу результат, как показано ниже
+-----+---+----------+----+----------+---+----------+
| name| nw|max(sumnt)| cat|max(sumct)| pt|max(sumpt)|
+-----+---+----------+----+----------+---+----------+
|Alice|bcd| 55.0|cat1| 95.0|pt1| 150.0|
|Alice|bcd| 55.0|cat2| 55.0|pt1| 150.0|
|Alice|abc| 95.0|cat1| 95.0|pt1| 150.0|
|Alice|abc| 95.0|cat2| 55.0|pt1| 150.0|
| Bob| av| 27.0|cat1| 54.0|pt4| 81.0|
| Bob| av| 27.0|cat4| 27.0|pt4| 81.0|
| Bob|bcd| 29.0|cat1| 54.0|pt4| 81.0|
| Bob|bcd| 29.0|cat4| 27.0|pt4| 81.0|
| Bob|abc| 25.0|cat1| 54.0|pt4| 81.0|
| Bob|abc| 25.0|cat4| 27.0|pt4| 81.0|
+-----+---+----------+----+----------+---+----------+
Заранее спасибо