我有一个Dataframe,它记录每个用户的项目等级,其中可以有排名关系。对于那些带有关系的用户 - 项对,我想在选择前k个条目时为每个用户随机打破关系。
e.g。在这个例子中,k = 3。
输入:
+-------+-------+----+
| user | item |rank|
+-------+-------+----+
| 1| 1| 1|
| 1| 2| 2|
| 2| 1| 1|
| 2| 3| 1|
| 2| 2| 2|
| 2| 4| 2|
| 3| 2| 1|
| 3| 4| 1|
| 3| 1| 2|
| 3| 3| 2|
+-------+-------+----+
一个期望的输出如下:
+-------+-------+----+
| user | item |rank|
+-------+-------+----+
| 1| 1| 1|
| 1| 2| 2|
| 2| 1| 1|
| 2| 3| 1|
| 2| 2| 2|
| 3| 2| 1|
| 3| 4| 1|
| 3| 1| 2|
+-------+-------+----+
或者下面是好的,另外两种组合(这里未列出)也是如此
+-------+-------+----+
| user | item |rank|
+-------+-------+----+
| 1| 1| 1|
| 1| 2| 2|
| 2| 1| 1|
| 2| 3| 1|
| 2| 4| 2|
| 3| 2| 1|
| 3| 4| 1|
| 3| 1| 2|
+-------+-------+----+
浏览所有spark.sql.functions,找不到任何有用的东西,也没有找到Google。
感谢任何帮助!