Spark,Scala-如何从数据框中的两列的每组中获取前3个值

Lea*_*ner 5 scala apache-spark apache-spark-sql

我有一个包含这些值的DataFrame:

Dept_id  |  name  | salary
 1           A       10
 2           B       100
 1           D       100
 2           C       105
 1           N       103
 2           F       102
 1           K       90
 2           E       110
Run Code Online (Sandbox Code Playgroud)

我想要这种形式的结果:

Dept_id  |  name  | salary
 1           N       103
 1           D       100
 1           K       90
 2           E       110
 2           C       105 
 2           F       102
Run Code Online (Sandbox Code Playgroud)

提前致谢 :)。

Ram*_*jan 5

该解决方案类似于检索顶部每组n一个数据帧的在pyspark中这是在pyspark

如果你在scala中做同样的事情,那么它应该如下

df.withColumn("rank", rank().over(Window.partitionBy("Dept_id").orderBy($"salary".desc)))
    .filter($"rank" <= 3)
    .drop("rank")
Run Code Online (Sandbox Code Playgroud)

我希望答案有帮助