복붙노트

[SCALA] 스파크 DataFrame를 사용하여 그룹 후 모든 그룹의을 TopN를 얻을 수

SCALA

스파크 DataFrame를 사용하여 그룹 후 모든 그룹의을 TopN를 얻을 수

나는 스파크 SQL의 DataFrame 있습니다 :

user1 item1 rating1
user1 item2 rating2
user1 item3 rating3
user2 item1 rating4
...

어떻게 그룹에 사용자가 다음 스칼라를 사용하여 모든 그룹에서을 TopN 항목을 반환?

파이썬을 사용하여 유사성 코드 :

df.groupby("user").apply(the_func_get_TopN)

해결법

  1. ==============================

    1.다음과 같이 순위 창 기능을 사용할 수 있습니다

    다음과 같이 순위 창 기능을 사용할 수 있습니다

    import org.apache.spark.sql.expressions.Window
    import org.apache.spark.sql.functions.{rank, desc}
    
    val n: Int = ???
    
    // Window definition
    val w = Window.partitionBy($"user").orderBy(desc("rating"))
    
    // Filter
    df.withColumn("rank", rank.over(w)).where($"rank" <= n)
    

    당신이 관계에 대한 상관 없어 경우에 당신은 ROW_NUMBER와 순위를 바꿀 수 있습니다

  2. from https://stackoverflow.com/questions/33655467/get-topn-of-all-groups-after-group-by-using-spark-dataframe by cc-by-sa and MIT license