> 데이터 베이스 > MySQL 튜토리얼 > Spark DataFrame의 각 그룹에서 첫 번째 행을 선택하는 방법은 무엇입니까?

Spark DataFrame의 각 그룹에서 첫 번째 행을 선택하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2025-01-23 13:12:14
원래의
390명이 탐색했습니다.

How to Select the First Row from Each Group in a Spark DataFrame?

그룹화된 DataFrame의 첫 번째 행 선택

Spark에서 복잡한 데이터 세트로 작업할 때 특정 기준에 따라 각 그룹에서 특정 행을 선택해야 하는 경우가 많습니다. 일반적인 시나리오는 각 그룹에서 첫 번째 행을 선택하고 특정 열을 기준으로 정렬하는 것입니다.

DataFrame의 각 그룹에서 첫 번째 행을 선택하기 위해 여러 가지 방법을 사용할 수 있습니다.

창 기능:

<code>import org.apache.spark.sql.functions._
import org.apache.spark.sql.expressions.Window

// 创建一个带有分组数据的 DataFrame
val df = sc.parallelize(Seq((0, "cat26", 30.9), (0, "cat13", 22.1), (0, "cat95", 19.6), (0, "cat105", 1.3),
  (1, "cat67", 28.5), (1, "cat4", 26.8), (1, "cat13", 12.6), (1, "cat23", 5.3),
  (2, "cat56", 39.6), (2, "cat40", 29.7), (2, "cat187", 27.9), (2, "cat68", 9.8),
  (3, "cat8", 35.6))).toDF("Hour", "Category", "TotalValue")

// 创建窗口规范
val w = Window.partitionBy($"Hour").orderBy($"TotalValue".desc)

// 计算每个组的行号
val dfTop = df.withColumn("rn", row_number.over(w)).where($"rn" === 1).drop("rn")

// 显示每个组的第一行
dfTop.show</code>
로그인 후 복사

간단한 SQL 집계 및 조인:

<code>val dfMax = df.groupBy($"Hour".as("max_hour")).agg(max($"TotalValue").as("max_value"))

val dfTopByJoin = df.join(broadcast(dfMax), ($"Hour" === $"max_hour") && ($"TotalValue" === $"max_value"))
  .drop("max_hour")
  .drop("max_value")

dfTopByJoin.show</code>
로그인 후 복사

구조 정렬:

<code>val dfTop = df.select($"Hour", struct($"TotalValue", $"Category").alias("vs"))
  .groupBy($"Hour")
  .agg(max("vs").alias("vs"))
  .select($"Hour", $"vs.Category", $"vs.TotalValue")

dfTop.show</code>
로그인 후 복사

데이터세트 API:

스파크 1.6:

<code>case class Record(Hour: Integer, Category: String, TotalValue: Double)

df.as[Record]
  .groupBy($"Hour")
  .reduce((x, y) => if (x.TotalValue > y.TotalValue) x else y)
  .show</code>
로그인 후 복사

Spark 2.0 이상:

<code>df.as[Record]
  .groupByKey(_.Hour)
  .reduceGroups((x, y) => if (x.TotalValue > y.TotalValue) x else y)</code>
로그인 후 복사

이러한 방법은 지정된 정렬 기준에 따라 각 그룹에서 첫 번째 행을 선택하는 다양한 방법을 제공합니다. 방법 선택은 특정 요구 사항과 성능 고려 사항에 따라 달라집니다.

위 내용은 Spark DataFrame의 각 그룹에서 첫 번째 행을 선택하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿