agregándose con una condición en groupby spark dataframe
Tengo un marco de datos
id lat long lag_lat lag_long detector lag_interval gpsdt lead_gpsdt
1 12 13 12 13 1 [1.5,3.5] 4 4.5
1 12 13 12 13 1 null 4.5 5
1 12 13 12 13 1 null 5 5.5
1 12 13 12 13 1 null 5.5 6
1 13 14 12 13 2 null 6 6.5
1 13 14 13 14 2 null 6.5 null
2 13 14 13 14 2 [0.5,1.5] 2.5 3.5
2 13 14 13 14 2 null 3.5 4
2 13 14 13 14 2 null 4 null
so quería aplicar una condición al usar groupby en la función agg de que si hacemos groupby col ("id") y col ("detector"), entonces quiero verificar la condición de que si lag_interval en ese grupo tiene algún valor no nulo valor, entonces, en la agregación quiero dos columnas, una es
min("lag_interval.col1") and other is max("lead_gpsdt")
Si no se cumple la condición anterior, entonces quiero
min("gpsdt"), max("lead_gpsdt")
utilizando este enfoque, quiero obtener los datos con una condición
df.groupBy("detector","id").agg(first("lat-long").alias("start_coordinate"),
last("lat-long").alias("end_coordinate"),struct(min("gpsdt"), max("lead_gpsdt")).as("interval"))
salid
id interval start_coordinate end_coordinate
1 [1.5,6] [12,13] [13,14]
1 [6,6.5] [13,14] [13,14]
2 [0.5,4] [13,14] [13,14]
**
para más explicaciones
** si vemos una parte de lo que groupby ("id", "detector") hace es eliminar una parte,
tenemos que ver que si en ese grupo de datos si uno de los valores en la columna ("lag_interval") no es nulo, entonces necesitamos usar una agregación como estamin (lag_interval.col1), max (lead_gpsdt) esta condición se aplicará al siguiente conjunto de datos
id lat long lag_lat lag_long detector lag_interval gpsdt lead_gpsdt
1 12 13 12 13 1 [1.5,3.5] 4 4.5
1 12 13 12 13 1 null 4.5 5
1 12 13 12 13 1 null 5 5.5
1 12 13 12 13 1 null 5.5 6
y si el valor total de col ("lag_interval") es nulo en ese grupo de datos, entonces necesitamos una salida de agregación comomin ("gpsdt"), max ("lead_gpsdt") esta condición se aplicará al siguiente conjunto de datos
id lat long lag_lat lag_long detector lag_interval gpsdt lead_gpsdt
1 13 14 12 13 2 null 6 6.5
1 13 14 13 14 2 null 6.5 null