将列的列转换为Pyspark中的一列值

时间:2017-08-23 07:10:48

标签: apache-spark pyspark spark-dataframe unpivot nmf

我已经运行了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)。

0 个答案:

没有答案