#dataframe #pyspark #group-by
Вопрос:
У меня есть фрейм данных foloowing
root
|-- transport_id: integer (nullable = true)
|-- vehicle_id: integer (nullable = true)
|-- vehicleName: string (nullable = true)
|-- Destination: long (nullable = false)
|-- travelYear: integer (nullable = true)
Я хочу узнать лучшие направления в зависимости от года поездки, а затем я хочу разделить лучшие направления на основе названия каждого транспортного средства
например, лучшие направления в зависимости от года путешествия
--- ----------- ------ -----------
|Top|destination|vehicle|travel_year|
--- --------- ------ -----------
| 1| SLanka | 5 | 2021|
| 2| SGapore| 2 | 2021|
| 3| Malay | 1 | 2021|
| 4| Canada | 3 | 2021|
Теперь я хочу разбить каждый верхний пункт назначения на имя каждого транспортного средства и его количество, как показано ниже
--- ----------- -------- ----- -----------
|Top|destination|veh_name|count|travel_year|
--- --------- -------- ----- -----------
| 1| SLanka | alto | 3 | 2021|
| 2| SLanka | premier| 2 | 2021|
| 3| Malay | prius | 1 | 2021|
| 4| Canada | benz | 2 | 2021|
| 4| Canada | Lambo | 1 | 2021|
Вторая таблица должна быть моим окончательным результатом.
Ниже приведен код, который я написал, чтобы получить первые результаты таблицы
newDf = df.select(df.destination,df.vehicle_name,df.travel_year.groupby('travel_year', 'destination')
.agg(count(df.vehicle_name).alias('vehicle')).sort( desc('vehicle') , desc('travel_year') )
top_destinations = newDf .withColumn('Top',dense_rank().over(Window.partitionBy('travel_year').orderBy(col('vehicle').desc())))
Но я не уверен, как получить вторую таблицу результатов.
Комментарии:
1. Пожалуйста, опубликуйте свой образец ввода и ожидаемый результат, иначе трудно представить ваши проблемы