>데이터 베이스 >MySQL 튜토리얼 >Scala를 사용하여 Spark SQL DataFrame에서 사용자 그룹당 상위 N개 항목을 검색하는 방법은 무엇입니까?

Scala를 사용하여 Spark SQL DataFrame에서 사용자 그룹당 상위 N개 항목을 검색하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-22 04:58:17455검색

How to Retrieve Top N Items per User Group in a Spark SQL DataFrame using Scala?

Spark SQL DataFrame에서 그룹화된 데이터에 대한 TopN 생성

문제:

사용자를 나타내는 열이 있는 Spark SQL DataFrame 제공 , 항목 및 사용자 평가에 대해 어떻게 사용자별로 그룹화한 다음 다음을 사용하여 각 그룹의 상위 N개 항목을 검색할 수 있습니까? Scala?

정답:

이를 달성하기 위해 다음과 같이 순위 창 기능을 활용할 수 있습니다.

import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions.{rank, desc}

val n: Int = ???

// Define the window specification
val w = Window.partitionBy($"user").orderBy(desc("rating"))

// Calculate the rank for each item
val withRank = df.withColumn("rank", rank.over(w))

// Filter to retain only the top N items
val topNPerUser = withRank.where($"rank" <= n)

자세한 내용 :

  • 순위 함수는 순위를 지정합니다. 각 사용자 그룹 내의 각 항목에 부여되며, 가장 높은 평가를 받은 항목은 순위 1을 받습니다.
  • w 창 사양은 DataFrame을 사용자별로 분할하고 평가에 따라 내림차순으로 데이터를 정렬하여 순위의 범위를 정의합니다.
  • withRank DataFrame에는 이제 필터링에 사용할 수 있는 "순위" 열이 포함됩니다.
  • topNPerUser DataFrame에는 상위 항목만 포함됩니다. 평점을 기준으로 각 사용자에 대한 N개 항목.

순위(동점 무시) 대신 연속 행 번호를 할당하는 row_number 함수를 사용하려는 경우 순위를 row_number로 바꿀 수 있습니다. 창 정의:

val w = Window.partitionBy($"user").orderBy(desc("rating"))

val withRowNumber = df.withColumn("row_number", row_number.over(w))

val topNPerUser = withRowNumber.where($"row_number" <= n)

위 내용은 Scala를 사용하여 Spark SQL DataFrame에서 사용자 그룹당 상위 N개 항목을 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.