我已经运行了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"列和#34;评级中的列表"列。
我想做的是" unpivot" " item_ids"中的每个列表和"评级"所以它看起来像这样:
|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需要一个永恒的时间。我也考虑过使用" stack"功能描述here,但所需的手动输入也需要永恒。我还考虑了代码here,但在涉及列表时它并不起作用。
有没有更有效的方法来做到这一点,而不必依靠熊猫? 我在Databricks上运行Pyspark(Spark 2.2.0)。