我有这样的数据
ID | Race | start | duration
-------|---------| ------| ---------
234 | 1010 | turtle| 100
235 | 1010 | turtle| 101
236 | 1010 | turtle| 99
237 | 1010 | rabbit| 199
238 | 1010 | rabbit| 201
239 | 1010 | rabbit| 85
240 | 9898 | rabbit| 185
241 | 9898 | rabbit| 205
242 | 9898 | rabbit| 505
243 | 9898 | turtle| 155
244 | 9898 | turtle| 104
从此我想选择:
turtle
和一个rabbit
示例:
根据以上数据,结果应为:
ID | Race | start | duration
-------|---------| ------| ---------
236 | 1010 | turtle| 99
239 | 1010 | rabbit| 85
240 | 9898 | rabbit| 185
244 | 9898 | turtle| 104
我做了什么:
w = Window().partitionBy("race").orderBy(col("duration").desc())
(df
.withColumn("rn", rowNumber().over(w))
.where(col("rn") == 1)
.select("race", "duration")).show()
然而,这对数据进行分组,但我没有得到预期的结果。
答案 0 :(得分:0)
嗨,你应该使用rank而不是rownumber并使#34; race"并且"开始"这里的列是代码片段,它将解决您的问题:
column A | column B | column C
001001 Adam 20
001002 Adam 1.2
001001 Brian 21
001002 Brian 1.5
001001 Cameron 25
001002 Cameron 1.1
001001 Daniel 18
001002 Daniel 1.8
001001 Edward 19
001002 Edward 2.3