Pypark中有一个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条具有相同用户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真的很陌生,有人能给我一个代码片段或者这个问题的相关文档的入口吗?太好了,谢谢!
6条答案
按热度按时间8fsztsew1#
在pyspark sqlquery中使用
ROW_NUMBER()
功能:n是该列所需的第n个最大值
输出:
查询将返回n个最大值
tkclm6bt2#
如果使用
row_number
而不是rank
获得等级相等时:注意
limit(20).toPandas()
用诡计代替show()
为了更好的格式,jupyter笔记本。yduiuuwa3#
使用Python3和spark 2.4
vc6uscn94#
我知道有人问这个问题
pyspark
我在寻找类似的答案Scala
即检索scala中Dataframe每组中的前n个值
这是你的名字
scala
@mtoto答案的版本。更多的例子可以在这里找到。
nhaq1z215#
下面是另一个没有窗口函数的解决方案,用于从pysparkDataframe获取前n条记录。
输出
如果您对spark中的更多窗口功能感兴趣,可以参考我的博客:https://medium.com/expedia-group-tech/deep-dive-into-apache-spark-window-functions-7b4e39ad3c86
14ifxucb6#
我认为您需要使用窗口函数来获得基于
user_id
以及score
,然后过滤结果以仅保留前两个值。总的来说,官方的编程指南是学习spark的好地方。
数据