¿Cómo escribir Pyspark UDAF en varias columnas?

Tengo los siguientes datos en un marco de datos pyspark llamadoend_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

Y quiero agregarlo de la siguiente manera:

Quiero usar las columnas "inicio" y "fin" como claves agregadasPara cada grupo de filas, necesito hacer lo siguiente:calcular el número único de valores en amboscat1 ycat2 para ese grupo por ejemplo, para el grupo destart= 1 yend= 2, este número sería 4 porque hay A, B, C, D. Este número se almacenará comon (n = 4 en este ejemplo).Para elvalues campo, para cada grupo necesito ordenar elvaluesy luego seleccione cadan-1 valor, donden es el valor almacenado de la primera operación anterior.al final de la agregación, realmente no me importa lo que hay encat1 ycat2 después de las operaciones anteriores.

Un ejemplo de salida del ejemplo anterior es:

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

¿Cómo logro usar los marcos de datos de pyspark? Supongo que necesito usar un UDAF personalizado, ¿verdad?

Respuestas a la pregunta(1)

Su respuesta a la pregunta