Crear una matriz de indicadores basada en los valores de columna de otro marco de datos en PySpark

Tengo dos marcos de datos:df1

+---+-----------------+
|id1|           items1|
+---+-----------------+
|  0|     [B, C, D, E]|
|  1|        [E, A, C]|
|  2|     [F, A, E, B]|
|  3|        [E, G, A]|
|  4|  [A, C, E, B, D]|
+---+-----------------+ 

ydf2:

+---+-----------------+
|id2|           items2|
+---+-----------------+
|001|           [A, C]|
|002|              [D]|
|003|        [E, A, B]|
|004|        [B, D, C]|
|005|           [F, B]|
|006|           [G, E]|
+---+-----------------+ 

Me gustaría crear un vector indicador (en una nueva columnaresult_array indf1) basado en valores enitems2. El vector debe tener la misma longitud que el número de filas endf2 (en este ejemplo debería tener 6 elementos). Sus elementos deben tener un valor de 1.0 si la fila enitems1 contiene todos los elementos en la fila correspondiente deitems2, o valor 0.0 de lo contrario. El resultado debería tener el siguiente aspecto:

+---+-----------------+-------------------------+
|id1|           items1|             result_array|
+---+-----------------+-------------------------+
|  0|     [B, C, D, E]|[0.0,1.0,0.0,1.0,0.0,0.0]|
|  1|        [E, A, C]|[1.0,0.0,0.0,0.0,0.0,0.0]|
|  2|     [F, A, E, B]|[0.0,0.0,1.0,0.0,1.0,0.0]|
|  3|        [E, G, A]|[0.0,0.0,0.0,0.0,0.0,1.0]|
|  4|  [A, C, E, B, D]|[1.0,1.0,1.0,1.0,0.0,0.0]|
+---+-----------------+-------------------------+

Por ejemplo, en la fila 0, el segundo valor es 1.0 porque [D] es un subconjunto de [B, C, D, E] y el cuarto valor es 1.0 porque [B, D, C] es un subconjunto de [B , C, D, E]. Todos los demás grupos de elementos endf2 no son subconjuntos de [B, C, D, E], por lo tanto, sus valores de indicador son 0.0.

Intenté crear una lista de todos los grupos de elementos enitems2 usando collect () y luego aplico un udf pero mis datos son demasiado grandes (más de 10 millones de filas).

Respuestas a la pregunta(1)

Su respuesta a la pregunta