gpt4 book ai didi

python - 在pyspark中检索每组DataFrame中的前n个

转载 作者:IT老高 更新时间:2023-10-28 21:53:18 26 4
gpt4 key购买 nike

pyspark中有一个DataFrame,数据如下:

user_id object_id score
user_1 object_1 3
user_1 object_1 1
user_1 object_2 2
user_2 object_1 5
user_2 object_2 2
user_2 object_2 6

我期望的是在每个组中返回 2 条具有相同 user_id 的记录,这些记录需要获得最高分。因此,结果应如下所示:

user_id object_id score
user_1 object_1 3
user_1 object_2 2
user_2 object_2 6
user_2 object_1 5

我真的是 pyspark 的新手,谁能给我一个代码片段或门户到这个问题的相关文档?非常感谢!

最佳答案

我相信你需要使用 window functions根据 user_idscore 获得每一行的排名,然后过滤您的结果以仅保留前两个值。

from pyspark.sql.window import Window
from pyspark.sql.functions import rank, col

window = Window.partitionBy(df['user_id']).orderBy(df['score'].desc())

df.select('*', rank().over(window).alias('rank'))
.filter(col('rank') <= 2)
.show()
#+-------+---------+-----+----+
#|user_id|object_id|score|rank|
#+-------+---------+-----+----+
#| user_1| object_1| 3| 1|
#| user_1| object_2| 2| 2|
#| user_2| object_2| 6| 1|
#| user_2| object_1| 5| 2|
#+-------+---------+-----+----+

一般来说,官方programming guide是开始学习 Spark 的好地方。

数据

rdd = sc.parallelize([("user_1",  "object_1",  3), 
("user_1", "object_2", 2),
("user_2", "object_1", 5),
("user_2", "object_2", 2),
("user_2", "object_2", 6)])
df = sqlContext.createDataFrame(rdd, ["user_id", "object_id", "score"])

关于python - 在pyspark中检索每组DataFrame中的前n个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38397796/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com