Поскольку df является исходным фреймом данных, и df ("count") пытается вернуть столбец, которого нет в исходном фрейме данных, фреймы данных являются неизменяемыми объектами, которые нельзя изменить, вы можете только преобразовать в очередь, возвращать новые фреймы данных без изменения исходного фрейма данных, поэтому groupby и agg не изменяют исходный df фрейм данных, но возвращают новые фреймы данных с преобразованиями в очереди (Spark is lazy).
desc ("count") - это функция, которая будет искать столбец с именем "count" в текущем фрейме данных, который не является оригинальным df , но созданный gorupby + agg , который уже имеет столбец "count".
Кстати, вы можете повторно использовать df в нескольких преобразованиях.