我的数据集如下所示
如你所见,数据是按评分和用户ID排序的。我需要创建一个新的数据框,只包含每个唯一用户ID分组的前两条结果。我尝试过
dataframe.groupBy("user_id").agg(someUdfFuntion)
我尝试使用排名函数,但似乎不起作用。我也尝试过过滤数据框,但没有结果。我该如何实现这一点?
回答:
尝试如下方法:
import org.apache.spark.sql.expressions.Windowimport org.apache.spark.sql.functions.row_numberval window = Window.partitionBy("userId").orderBy($"rating".desc)dataframe.withColumn("r", row_number.over(window)).where($"r" <= n)