Просто, скажем, у меня был следующий DataFrame:
+-------------+----------+------+
|employee_name|department|salary|
+-------------+----------+------+
| James| Sales| 3000|
| Michael| Sales| 4600|
| Robert| Sales| 4100|
| Maria| Finance| 3000|
| James| Sales| 3000|
| Scott| Finance| 3300|
| Jen| Finance| 3900|
| Jeff| Marketing| 3000|
| Kumar| Marketing| 2000|
| Saif| Sales| 4100|
+-------------+----------+------+
Как я могу сгруппировать по отделам и получить все остальные значения в списке следующим образом:
отделение | Имя сотрудника | зарплата |
---|---|---|
Продажи | [Джеймс, Майкл, Роберт, Джеймс, Саиф] | [3000, 4600, 4100, 3000, 4100] |
Финансы | [Мария, Скотт, Джен] | [3000, 3300, 3900] |
Маркетинг | [Джефф, Кумар] | [3000, 2000] |
Используйте collect_list
с предложением groupBy
from pyspark.sql.functions import *
df.groupBy(col("department")).agg(collect_list(col("employee_name")).alias("employee_name"),collect_list(col("employee_name")).alias("salary"))
Давайте попробуем с минимальным набором текста;
df.groupby('department').agg(*[collect_list(c).alias(c) for c in df.drop('department').columns]).show()