0

我已经运行了一个 ALS 模型,并且正在处理输出建议。它们目前采用这种格式:

|user_id|item_ids|    ratings   |  
|   72  | [5,2,3]| [1.2,3.6,4.1]| 
|   16  | [1,9,5]| [4.4,2.0,3.9]|

每行在“item_ids”列中包含一个列表,在“ratings”列中包含一个列表。

我想做的是“取消透视”“item_ids”和“ratings”中的每个列表,使其看起来像这样:

|user_id|item_ids|ratings|
|  72   |   5    |  1.2  |  
|  72   |   2    |  3.6  |  
|  72   |   3    |  4.1  |  
|  16   |   1    |  4.4  | 
|  16   |   9    |  2.0  | 
|  16   |   5    |  3.9  |  

我发现这样做的唯一方法是通过过滤一个 user_id 一次一个用户,将列表转换为 Pandas 数据帧中的列,然后将其往返返回到 Spark 数据帧。正如您可能想象的那样,使用几百万个 user_id 需要很长时间才能完成。我也考虑过使用此处描述的“堆​​栈”功能,但所需的手动输入也需要很长时间。我还考虑了此处找到的代码,但在涉及列表时它不起作用。

有没有更有效的方法来做到这一点而不必依赖 Pandas?我在 Databricks 上运行 Pyspark (Spark 2.2.0)。

4

0 回答 0