Como escrever Pyspark UDAF em várias colunas?

Eu tenho os seguintes dados em um dataframe pyspark chamadoend_stats_df:

values     start    end    cat1   cat2
10          1        2     A      B
11          1        2     C      B
12          1        2      D     B
510          1        2     D      C
550          1        2     C      B
500          1        2     A      B
80          1        3     A      B

E eu quero agregá-lo da seguinte maneira:

Eu quero usar as colunas "start" e "end" como as chaves agregadasPara cada grupo de linhas, preciso fazer o seguinte:calcular o número único de valores em amboscat1 ecat2 para esse grupo. por exemplo, para o grupo destart= 1 eend= 2, esse número seria 4 porque há A, B, C, D. Esse número será armazenado comon (n = 4 neste exemplo).para ovalues campo, para cada grupo eu preciso classificar ovaluese selecione todos osn-1 valor, onden é o valor armazenado da primeira operação acima.no final da agregação, eu realmente não me importo com o que estácat1 ecat2 após as operações acima.

Um exemplo de saída do exemplo acima é:

values     start    end    cat1   cat2
12          1        2      D     B
550          1        2     C      B
80          1        3     A      B

Como faço para usar os quadros de dados pyspark? Presumo que preciso usar um UDAF personalizado, certo?

questionAnswers(1)

yourAnswerToTheQuestion