¿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 elvalues
y 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?