max_by/min_by

Узнала про прикольные функции, они заменяют оконку/CTE на одно поле

Пример - вывести имя сотрудника с максимальным стажем по каждому департаменту

result = df.groupBy("department").agg( F.max_by("name", "years") )

И все! Не надо никаких row_number = 1

В Spark SQL можно еще и фильтр набросить:

spark.sql(""" select department, max_by(name, years) filter (where name is not null) from employees group by department """)

А в Trino еще можно собрать массив топ-n в убывающем порядке:

select department, max_by(name, years) AS top_employee, max_by(name, years, 2) AS top_2_employees from employees group by department

Аналог в ClickHouse - argMax

@data_engineerette

maxby/minby
Узнала про прикольные функции, они заменяют оконку/CTE на одно поле
Пример - вывести имя сотрудника с максимальным стажем по каждому департаменту
result = df.groupBy("department").agg(
F | Сетка — социальная сеть от hh.ru