问题如下:
'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')
Run Code Online (Sandbox Code Playgroud)
另一个表格包含电影、类型及其相关标签
'movie', 'genre', 'tags'. (DataFrame size, around 23M Rows)
------------------------
M1 Action, 'guns', 'dying', 'bleeding', 'outside', 'worldwide'. approx ~10 records for each movie
Run Code Online (Sandbox Code Playgroud)
我想迭代每部电影,并尝试通过比较标签来扩展其类型相似性。 没有模糊算法,只是精确匹配。
我想返回一个数据帧(相同的电影、流派、标签数据帧),其中包含名为的新列potentially_related_genres和流派列表。
在我看来,我有两个选择:
crossJoin并使用 UDF 比较两列,但这会很糟糕,因为它会让我迭代 5,750,000,000 行。(交叉连接输出)
腌制结果(collect()对第一个数据帧(250 行)进行操作,然后在 UDF 中使用所有逻辑,这通过调用原始数据帧并使用 withColumn
DF.withColumn('potentially_related_genres', my_udf('genre', 'tags'))
该方法的问题在于,传递给驱动程序是一个相当大的收集(记住胖列 top_tags )。并将其转移给所有要使用的工人。(酸洗和脱酸)
有什么建议吗?
提前致谢。