El problema es el siguiente:
'genre', 'top_tags' (250 rows) ---------------- Action, Array('bleeding', 'dying', 'guns', ...) - can hold up to 50k max. (avg is 4000) Drama, Array('crying', 'hard life', 'street')Y otra tabla con películas, un género y sus etiquetas asociadas
'movie', 'genre', 'tags'. (DataFrame size, around 23M Rows) ------------------------ M1 Action, 'guns', 'dying', 'bleeding', 'outside', 'worldwide'. approx ~10 records for each movieQuiero iterar cada película e intentar extender su similitud de género comparando etiquetas. SIN algoritmo difuso , solo coincidencia exacta.
Quiero devolver un marco de datos (la misma película, género, marco de datos de etiquetas) con una nueva columna llamada potentially_related_genres y una lista de géneros.
Como yo lo veo, tengo dos opciones:
crossJoin y compare dos columnas usando UDF, pero esto será malo ya que me obligará a iterar 5,750,000,000 filas. (salida crossJoin)
seleccione los resultados (haga una collect() en el primer marco de datos (250 filas) y utilícelo justo después dentro de un UDF con toda la lógica, esto llamando al marco de datos original y utilícelo con Columna
DF.withColumn('potentially_related_genres', my_udf('genre', 'tags'))
El problema con el enfoque es que pasar al controlador es una recopilación bastante grande (recuerde la columna gruesa top_tags). y transferir esto a todos los trabajadores para ser utilizado. (el decapado y decapado)
Cualquier sugerencia ?
Gracias por adelantado.