Если я правильно понимаю, что вам нужно сделать:
from pyspark.sql.functions import *
df_busSelected = spark.createDataFrame([("NV", "Las Vegas",29361),("ON", "Toronto" ,18904),("AZ", "Phoenix",18764),("NC", "Charlotte",9507),("AZ", "Scottsdale",8837),("AB", "Calgary",7735),("PA", "Pittsburgh",7016),("QC", "Montréal",6449),("AZ", "Mesa",6080),("NV", "Henderson",4892),("AZ", "Tempe",4550)]).toDF("state", "city", "count")
df_busSelected.withColumn("city_total_business", struct(col("count"), col("city")))\
.groupBy("state")\
.agg(sort_array(collect_set(col("city_total_business")), False)[0].name("top_city"))\
.withColumn("city", col("top_city").getItem("city"))\
.withColumn("count", col("top_city").getItem("count"))\
.drop("top_city")\
.show()
Распечатывает
+-----+----------+-----+
|state| city|count|
+-----+----------+-----+
| AZ| Phoenix|18764|
| QC| Montréal| 6449|
| NV| Las Vegas|29361|
| NC| Charlotte| 9507|
| PA|Pittsburgh| 7016|
| ON| Toronto|18904|
| AB| Calgary| 7735|
+-----+----------+-----+
Возвращает город с наибольшим количеством для каждого штата. Теперь легко сортировать и делать с ними все, что вы хотите.
Пожалуйста, оцените мой ответ, если вам это нравится.