python—删除列a在列b中至少没有x个唯一值的行,pyspark

mf98qq94  于 2021-07-12  发布在  Spark
关注(0)|答案(2)|浏览(256)

所以我有一个像这样的Dataframe

user_id item   category rank
-------------------------------
user_1  item1  categoryA  1
user_1  item2  categoryA  2
user_1  item3  categoryA  3
user_1  item4  categoryD  4
user_1  item5  categoryD  5
user_2  item6  categoryB  1
user_2  item7  categoryB  2
user_2  item8  categoryB  3
user_2  item9  categoryA  4
user_2  item10 categoryE  5
user_2  item11 categoryE  6
user_3  item6  categoryB  1
user_3  item7  categoryB  2
user_3  item8  categoryB  3
user_3  item9  categoryA  4
user_3  item10 categoryE  5
user_3  item11 categoryE  6

其中我为用户提供了项目建议。我希望每个用户有6个推荐,我想统计一下有多少用户有6个推荐(在这个例子中是user2和user3),还有多少用户没有6个推荐(user1)。
我也可以放弃那些谁没有至少6(user1)。
哪一种方法是最好的?rankoverwindow秩和?检查这个值是不是6?

hm2xizp9

hm2xizp91#

你可以做一个左半连接 user_id 至少有 rank >=6 :

df1 = df.join(
    df.filter("rank >= 6").select("user_id").distinct(),
    ["user_id"],
    "left_semi"
)

df1.show()

# +-------+------+---------+----+

# |user_id|  item| category|rank|

# +-------+------+---------+----+

# | user_2| item6|categoryB|   1|

# | user_2| item7|categoryB|   2|

# | user_2| item8|categoryB|   3|

# | user_2| item9|categoryA|   4|

# | user_2|item10|categoryE|   5|

# | user_2|item11|categoryE|   6|

# | user_3| item6|categoryB|   1|

# | user_3| item7|categoryB|   2|

# | user_3| item8|categoryB|   3|

# | user_3| item9|categoryA|   4|

# | user_3|item10|categoryE|   5|

# | user_3|item11|categoryE|   6|

# +-------+------+---------+----+

或者 max_rank >= 6 窗口上方:

from pyspark.sql import functions as F, Window

df1 = df.withColumn("max_rn", F.max("rank").over(Window.partitionBy("user_id")))\
    .filter("max_rn >= 6").drop("max_rn")
ibrsph3r

ibrsph3r2#

您可以使用每个用户的计数进行筛选:

from pyspark.sql import functions as F, Window

df2 = df.withColumn(
    'cnt', 
    F.count('*').over(Window.partitionBy('user_id'))
).filter('cnt >= 6')

df2.show()
+-------+------+---------+----+---+
|user_id|  item| category|rank|cnt|
+-------+------+---------+----+---+
| user_2| item6|categoryB|   1|  6|
| user_2| item7|categoryB|   2|  6|
| user_2| item8|categoryB|   3|  6|
| user_2| item9|categoryA|   4|  6|
| user_2|item10|categoryE|   5|  6|
| user_2|item11|categoryE|   6|  6|
| user_3| item6|categoryB|   1|  6|
| user_3| item7|categoryB|   2|  6|
| user_3| item8|categoryB|   3|  6|
| user_3| item9|categoryA|   4|  6|
| user_3|item10|categoryE|   5|  6|
| user_3|item11|categoryE|   6|  6|
+-------+------+---------+----+---+

相关问题