>데이터 베이스 >MySQL 튜토리얼 >Spark DataFrame에서 그룹당 상위 N개 항목을 효율적으로 찾는 방법은 무엇입니까?

Spark DataFrame에서 그룹당 상위 N개 항목을 효율적으로 찾는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-25 22:55:17836검색

How to Efficiently Find the Top N Items per Group in a Spark DataFrame?

Spark DataFrame을 사용한 그룹화 및 TopN

소개:
Spark DataFrame은 데이터 조작 및 집계를 위한 강력한 기능을 제공합니다. 특정 열을 기준으로 데이터를 그룹화한 다음 각 그룹 내에서 상위 N 값 찾기 등의 작업을 수행하는 것은 데이터 처리의 일반적인 요구 사항입니다.

문제 설명:
사용자, 항목, 평가와 같은 열이 있는 Spark DataFrame입니다. 작업은 데이터를 사용자별로 그룹화하고 각 그룹에서 상위 N개 항목을 반환하는 것입니다. 여기서 N은 미리 정의된 숫자입니다.

해결책:

사용 창 기능:

Scala 코드:

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)

설명:
이 코드는 창 기능을 활용하여 등급 열을 기준으로 각 사용자 그룹 내 항목의 순위를 내림차순으로 지정합니다. 순위 함수는 파티션 내의 각 행에 순위를 할당하여 정렬된 목록에서의 위치를 ​​나타냅니다. 순위 <= n으로 필터링하면 각 그룹의 상위 N개 항목만 유지됩니다.

row_number 함수 사용:

처리할 필요가 없는 경우 동점(여러 항목의 순위가 동일한 경우)인 경우 순위 대신 row_number를 사용할 수 있습니다. 코드는 withColumn 표현식의 Rank.over(w)를 row_number.over(w)로 대체하여 위와 유사하게 유지됩니다.

이러한 그룹화 및 창 지정 기술을 활용하면 내에서 상위 N개 항목을 효율적으로 찾을 수 있습니다. Spark DataFrame의 각 그룹을 통해 데이터에서 귀중한 통찰력을 효과적으로 추출할 수 있습니다.

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

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