В моей программе Scala я сталкиваюсь с проблемой объединения результатов нескольких уровней GroupBy.
Набор данных, который я использую, довольно большой. В качестве небольшого примера у меня есть кадр данных, который выглядит следующим образом:
+---+---+----+-----+-----+
| F| L| Loy|Email|State|
+---+---+----+-----+-----+
| f1| l1|loy1| null| s1|
| f1| l1|loy1| e1| s1|
| f2| l2|loy2| e2| s2|
| f2| l2|loy2| e3| null|
| f1| l1|null| e1| s3|
+---+---+----+-----+-----+
Для первого уровня groupBy Я использую следующий скрипт, чтобы получить результат, основанный на тех же столбцах (F, L, Loy) :
df.groupBy("F", "L", "Loy").agg(collect_set($"Email").alias("Email"), collect_set($"State").alias("State")).show
Результат примерно такой:
+---+---+----+--------+-----+
| F| L| Loy| Email|State|
+---+---+----+--------+-----+
| f1| l1|null| [e1]| [s3]|
| f2| l2|loy2|[e2, e3]| [s2]|
| f1| l1|loy1| [e1]| [s1]|
+---+---+----+--------+-----+
Проблема, с которой я сталкиваюсь, заключается в том, как я могу выполнить второй уровень groupBy , который основан на условии (F, L, Email) и принимает в качестве введите F и L как строку, а столбец Email как массив [String]. Этот groupBy должен возвращать результат следующим образом:
+---+---+----+--------+---------+
| F| L| Loy| Email| State|
+---+---+----+--------+---------+
| f1| l1|loy1| [e1]| [s3, s1]|
| f2| l2|loy2|[e2, e3]| [s2]|
+---+---+----+--------+---------+
Основная цель - максимально сократить количество записей, применяя groupBy на разных уровнях. Я довольно новичок в Scala, и любая помощь будет оценена :)