2016-10-20 5 views
1

У меня есть набор данных, как этотВозьмите первые п записей из dataframe сгруппированных по уникальному идентификатору

enter image description here

Как вы видите, упорядочено по рейтингу и USERID мне нужно, чтобы получить новый Dataframe только с топ 2 результатов из каждой группы по уникальной user_id Я попытался

dataframe.groupBy("user_id").agg(someUdfFuntion) 

Я пытался использовать функцию ранга, но это, кажется, не работает, я пытался фильтровать dataframe, но никакого результата, как я мог это сделать?

ответ

3

Try:

import org.apache.spark.sql.expressions.Window 
import org.apache.spark.sql.functions.row_number 

val window = Window.partitionBy("userId").orderBy($"rating".desc) 

dataframe.withColumn("r", row_number.over(window)).where($"r" <= n) 
+0

человек плз последний вопрос, как я могу сделать это же самое, но применение фильтра для каждого раздела? –

+0

Я не понимаю, что вы имеете в виду. –

+0

Я имею в виду, мне нужно то же самое, но вместо сокращения на n число мне нужно отфильтровать каждую группу, содержащуюся в Seq, скажем. –

Смежные вопросы