Pyspark Dataframe pivot и groupby count

Я работаю над фреймворком pyspark, который выглядит, как показано ниже

id category
1 A
1 A
1 B
2 B
2 A
3 B
3 B
3 B

Я хочу разложить столбец категорий и подсчитать их появление. Итак, результат, который я хочу, показан ниже

id A B
1 2 1
2 1 1
3 Null 3

Я попытался найти в Интернете что-то, что могло бы мне помочь, но не смог найти ничего, что могло бы дать мне такой конкретный результат.


person Sayed Shazeb    schedule 25.10.2019    source источник
comment
Пожалуйста, предоставьте воспроизводимый пример с минимальным вводом и ожидаемым выводом   -  person chrisckwong821    schedule 25.10.2019


Ответы (2)


Попробуйте это - (Не уверен, что он оптимизирован)

df = spark.createDataFrame([(1,'A'),(1,'A'),(1,'B'),(2,'B'),(2,'A'),(3,'B'),(3,'B'),(3,'B')],['id','category'])
df = df.groupBy('id','category').count()
df.groupBy('id').pivot('category').sum('count').show()

введите здесь описание изображения

person Rahul    schedule 25.10.2019

Краткая версия, не нужно делать несколько групп

df.groupBy("id").pivot("category").count().show()
person Athi    schedule 17.05.2021